ZGlmZiAtLWdpdCBhL0NvbmZpZ3VyZSBiL0NvbmZpZ3VyZQppbmRleCBkZTc4NDY5Li4yNjc0M2JiIDEwMDc1NQotLS0gYS9Db25maWd1cmUKKysrIGIvQ29uZmlndXJlCkBAIC0xMzYsNyArMTM2LDggQEAgbXkgJGFscGhhX2FzbT0iYWxwaGFjcHVpZC5vOmJuX2FzbS5vIGFscGhhLW1vbnQubzo6Ojo6c2hhMS1hbHBoYS5vOjo6Ojo6OmdoYXNoLWEKIG15ICRtaXBzMzJfYXNtPSI6Ym4tbWlwcy5vOjphZXNfY2JjLm8gYWVzLW1pcHMubzo6OnNoYTEtbWlwcy5vIHNoYTI1Ni1taXBzLm86Ojo6Ojo6OiI7CiBteSAkbWlwczY0X2FzbT0iOmJuLW1pcHMubyBtaXBzLW1vbnQubzo6YWVzX2NiYy5vIGFlcy1taXBzLm86OjpzaGExLW1pcHMubyBzaGEyNTYtbWlwcy5vIHNoYTUxMi1taXBzLm86Ojo6Ojo6OiI7CiBteSAkczM5MHhfYXNtPSJzMzkweGNhcC5vIHMzOTB4Y3B1aWQubzpibi1zMzkweC5vIHMzOTB4LW1vbnQubyBzMzkweC1nZjJtLm86OmFlcy1zMzkweC5vIGFlcy1jdHIubyBhZXMteHRzLm86OjpzaGExLXMzOTB4Lm8gc2hhMjU2LXMzOTB4Lm8gc2hhNTEyLXMzOTB4Lm86OnJjNC1zMzkweC5vOjo6OjpnaGFzaC1zMzkweC5vOiI7Ci1teSAkYXJtdjRfYXNtPSJhcm1jYXAubyBhcm12NGNwdWlkLm86Ym5fYXNtLm8gYXJtdjQtbW9udC5vIGFybXY0LWdmMm0ubzo6YWVzX2NiYy5vIGFlcy1hcm12NC5vOjo6c2hhMS1hcm12NC1sYXJnZS5vIHNoYTI1Ni1hcm12NC5vIHNoYTUxMi1hcm12NC5vOjo6Ojo6OmdoYXNoLWFybXY0Lm86OnZvaWQiOworbXkgJGFybXY0X2FzbT0iYXJtY2FwLm8gYXJtdjRjcHVpZC5vOmJuX2FzbS5vIGFybXY0LW1vbnQubyBhcm12NC1nZjJtLm86OmFlc19jYmMubyBhZXMtYXJtdjQubyBic2Flcy1hcm12Ny5vIGFlc3Y4LWFybXgubzo6OnNoYTEtYXJtdjQtbGFyZ2UubyBzaGEyNTYtYXJtdjQubyBzaGE1MTItYXJtdjQubzo6Ojo6OjpnaGFzaC1hcm12NC5vIGdoYXNodjgtYXJteC5vOjp2b2lkIjsKK215ICRhYXJjaDY0X2FzbT0iYXJtY2FwLm8gYXJtNjRjcHVpZC5vIG1lbV9jbHIubzo6OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlc3Y4LWFybXgubzo6OnNoYTEtYXJtdjgubyBzaGEyNTYtYXJtdjgubyBzaGE1MTItYXJtdjgubzo6Ojo6OjpnaGFzaHY4LWFybXgubzoiOwogbXkgJHBhcmlzYzExX2FzbT0icGFyaXNjaWQubzpibl9hc20ubyBwYXJpc2MtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcGFyaXNjLm86OjpzaGExLXBhcmlzYy5vIHNoYTI1Ni1wYXJpc2MubyBzaGE1MTItcGFyaXNjLm86OnJjNC1wYXJpc2Mubzo6Ojo6Z2hhc2gtcGFyaXNjLm86OjMyIjsKIG15ICRwYXJpc2MyMF9hc209InBhcmlzY2lkLm86cGEtcmlzYzJXLm8gcGFyaXNjLW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjo2NCI7CiBteSAkcHBjMzJfYXNtPSJwcGNjcHVpZC5vIHBwY2NhcC5vOmJuLXBwYy5vIHBwYy1tb250Lm8gcHBjNjQtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcHBjLm86OjpzaGExLXBwYy5vIHNoYTI1Ni1wcGMubzo6Ojo6Ojo6IjsKQEAgLTM1MCw2ICszNTEsNyBAQCBteSAldGFibGU9KAogIyBJdCdzIGJlbGlldmVkIHRoYXQgbWFqb3JpdHkgb2YgQVJNIHRvb2xjaGFpbnMgcHJlZGVmaW5lIGFwcHJvcHJpYXRlIC1tYXJjaC4KICMgSWYgeW91IGNvbXBpbGVyIGRvZXMgbm90LCBkbyBjb21wbGVtZW50IGNvbmZpZyBjb21tYW5kIGxpbmUgd2l0aCBvbmUhCiAibGludXgtYXJtdjQiLAkiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKyJsaW51eC1hYXJjaDY0IiwiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthYXJjaDY0X2FzbX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKICMjIyMgSUEtMzIgdGFyZ2V0cy4uLgogImxpbnV4LWlhMzItaWNjIiwJImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiAibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKQEAgLTE1MDMsNyArMTUwNSw3IEBAIGlmICgkcm1kMTYwX29iaiA9fiAvXC5vJC8pCiAJfQogaWYgKCRhZXNfb2JqID1+IC9cLm8kLykKIAl7Ci0JJGNmbGFncy49IiAtREFFU19BU00iOworCSRjZmxhZ3MuPSIgLURBRVNfQVNNIiBpZiAoJGFlc19vYmogPX4gbS9cYmFlc1wtLyk7OwogCSMgYWVzLWN0ci5vIGlzIG5vdCBhIHJlYWwgZmlsZSwgb25seSBpbmRpY2F0aW9uIHRoYXQgYXNzZW1ibGVyCiAJIyBtb2R1bGUgaW1wbGVtZW50cyBBRVNfY3RyMzJfZW5jcnlwdC4uLgogCSRjZmxhZ3MuPSIgLURBRVNfQ1RSX0FTTSIgaWYgKCRhZXNfb2JqID1+IHMvXHMqYWVzXC1jdHJcLm8vLyk7CkBAIC0xNTI1LDcgKzE1MjcsNyBAQCBlbHNlCXsKIAkkd3Bfb2JqPSJ3cF9ibG9jay5vIjsKIAl9CiAkY21sbF9vYmo9JGNtbGxfZW5jCXVubGVzcyAoJGNtbGxfb2JqID1+IC8ubyQvKTsKLWlmICgkbW9kZXNfb2JqID1+IC9naGFzaC8pCitpZiAoJG1vZGVzX29iaiA9fiAvZ2hhc2hcLS8pCiAJewogCSRjZmxhZ3MuPSIgLURHSEFTSF9BU00iOwogCX0KZGlmZiAtLWdpdCBhL2NvbmZpZyBiL2NvbmZpZwppbmRleCA0MWZhMmE2Li5kZmY3ZGY3IDEwMDc1NQotLS0gYS9jb25maWcKKysrIGIvY29uZmlnCkBAIC02NDQsNiArNjQ0LDcgQEAgY2FzZSAiJEdVRVNTT1MiIGluCiAgIGFybXZbMS0zXSotKi1saW51eDIpIE9VVD0ibGludXgtZ2VuZXJpYzMyIiA7OwogICBhcm12WzctOV0qLSotbGludXgyKSBPVVQ9ImxpbnV4LWFybXY0Ijsgb3B0aW9ucz0iJG9wdGlvbnMgLW1hcmNoPWFybXY3LWEiIDs7CiAgIGFybSotKi1saW51eDIpIE9VVD0ibGludXgtYXJtdjQiIDs7CisgIGFhcmNoNjQtKi1saW51eDIpIE9VVD0ibGludXgtYWFyY2g2NCIgOzsKICAgc2gqYi0qLWxpbnV4MikgT1VUPSJsaW51eC1nZW5lcmljMzIiOyBvcHRpb25zPSIkb3B0aW9ucyAtREJfRU5ESUFOIiA7OwogICBzaCotKi1saW51eDIpICBPVVQ9ImxpbnV4LWdlbmVyaWMzMiI7IG9wdGlvbnM9IiRvcHRpb25zIC1ETF9FTkRJQU4iIDs7CiAgIG02OGsqLSotbGludXgyKSBPVVQ9ImxpbnV4LWdlbmVyaWMzMiI7IG9wdGlvbnM9IiRvcHRpb25zIC1EQl9FTkRJQU4iIDs7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL01ha2VmaWxlIGIvY3J5cHRvL2Flcy9NYWtlZmlsZQppbmRleCA0NWVkZTBhLi45MTgxYTFhIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzL01ha2VmaWxlCisrKyBiL2NyeXB0by9hZXMvTWFrZWZpbGUKQEAgLTc4LDkgKzc4LDE1IEBAIGFlcy1wYXJpc2MuczoJYXNtL2Flcy1wYXJpc2MucGwKIGFlcy1taXBzLlM6CWFzbS9hZXMtbWlwcy5wbAogCSQoUEVSTCkgYXNtL2Flcy1taXBzLnBsICQoUEVSTEFTTV9TQ0hFTUUpICRACiAKK2Flc3Y4LWFybXguUzoJYXNtL2Flc3Y4LWFybXgucGwKKwkkKFBFUkwpIGFzbS9hZXN2OC1hcm14LnBsICQoUEVSTEFTTV9TQ0hFTUUpICRACithZXN2OC1hcm14Lm86CWFlc3Y4LWFybXguUworCiAjIEdOVSBtYWtlICJjYXRjaCBhbGwiCiBhZXMtJS5TOglhc20vYWVzLSUucGw7CSQoUEVSTCkgJDwgJChQRVJMQVNNX1NDSEVNRSkgPiAkQAogYWVzLWFybXY0Lm86CWFlcy1hcm12NC5TCitic2Flcy0lLlM6CWFzbS9ic2Flcy0lLnBsOwkkKFBFUkwpICQ8ICQoUEVSTEFTTV9TQ0hFTUUpICRACitic2Flcy1hcm12Ny5vOglic2Flcy1hcm12Ny5TCiAKIGZpbGVzOgogCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucGwgYi9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucGwKaW5kZXggODZiODZjNC4uNGY4OTE3MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Flcy9hc20vYWVzLWFybXY0LnBsCisrKyBiL2NyeXB0by9hZXMvYXNtL2Flcy1hcm12NC5wbApAQCAtMSw3ICsxLDcgQEAKICMhL3Vzci9iaW4vZW52IHBlcmwKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCiAjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKICMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKICMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCkBAIC01MSw5ICs1MSwyMyBAQCAka2V5PSJyMTEiOwogJHJvdW5kcz0icjEyIjsKIAogJGNvZGU9PDxfX187Ci0jaW5jbHVkZSAiYXJtX2FyY2guaCIKKyNpZm5kZWYgX19LRVJORUxfXworIyBpbmNsdWRlICJhcm1fYXJjaC5oIgorI2Vsc2UKKyMgZGVmaW5lIF9fQVJNX0FSQ0hfXyBfX0xJTlVYX0FSTV9BUkNIX18KKyNlbmRpZgorCiAudGV4dAorI2lmIF9fQVJNX0FSQ0hfXzw3CisuY29kZQkzMgorI2Vsc2UKKy5zeW50YXgJdW5pZmllZAorIyBpZmRlZiBfX3RodW1iMl9fCisudGh1bWIKKyMgZWxzZQogLmNvZGUJMzIKKyMgZW5kaWYKKyNlbmRpZgogCiAudHlwZQlBRVNfVGUsJW9iamVjdAogLmFsaWduCTUKQEAgLTE2Nyw3ICsxODEsMTEgQEAgQUVTX1RlOgogLnR5cGUgICBBRVNfZW5jcnlwdCwlZnVuY3Rpb24KIC5hbGlnbgk1CiBBRVNfZW5jcnlwdDoKKyNpZiBfX0FSTV9BUkNIX188NwogCXN1YglyMyxwYywjOAkJQCBBRVNfZW5jcnlwdAorI2Vsc2UKKwlhZHIJcjMsQUVTX2VuY3J5cHQKKyNlbmRpZgogCXN0bWRiICAgc3AhLHtyMSxyNC1yMTIsbHJ9CiAJbW92CSRyb3VuZHMscjAJCUAgaW5wCiAJbW92CSRrZXkscjIKQEAgLTQwOSwxMSArNDI3LDIxIEBAIF9hcm12NF9BRVNfZW5jcnlwdDoKIC5hbGlnbgk1CiBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXk6CiBfYXJtdjRfQUVTX3NldF9lbmNyeXB0X2tleToKKyNpZiBfX0FSTV9BUkNIX188NwogCXN1YglyMyxwYywjOAkJQCBBRVNfc2V0X2VuY3J5cHRfa2V5CisjZWxzZQorCWFkcglyMyxwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkKKyNlbmRpZgogCXRlcQlyMCwjMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWl0dAllcQkJCUAgVGh1bWIyIHRoaW5nLCBzYW5pdHkgY2hlY2sgaW4gQVJNCisjZW5kaWYKIAltb3ZlcQlyMCwjLTEKIAliZXEJLkxhYnJ0CiAJdGVxCXIyLCMwCisjaWYgX19BUk1fQVJDSF9fPj03CisJaXR0CWVxCQkJQCBUaHVtYjIgdGhpbmcsIHNhbml0eSBjaGVjayBpbiBBUk0KKyNlbmRpZgogCW1vdmVxCXIwLCMtMQogCWJlcQkuTGFicnQKIApAQCAtNDIyLDYgKzQ1MCw5IEBAIF9hcm12NF9BRVNfc2V0X2VuY3J5cHRfa2V5OgogCXRlcQlyMSwjMTkyCiAJYmVxCS5Mb2sKIAl0ZXEJcjEsIzI1NgorI2lmIF9fQVJNX0FSQ0hfXz49NworCWl0dAluZQkJCUAgVGh1bWIyIHRoaW5nLCBzYW5pdHkgY2hlY2sgaW4gQVJNCisjZW5kaWYKIAltb3ZuZQlyMCwjLTEKIAlibmUJLkxhYnJ0CiAKQEAgLTU3Niw2ICs2MDcsOSBAQCBfYXJtdjRfQUVTX3NldF9lbmNyeXB0X2tleToKIAlzdHIJJHMyLFska2V5LCMtMTZdCiAJc3Vicwkkcm91bmRzLCRyb3VuZHMsIzEKIAlzdHIJJHMzLFska2V5LCMtMTJdCisjaWYgX19BUk1fQVJDSF9fPj03CisJaXR0CWVxCQkJCUAgVGh1bWIyIHRoaW5nLCBzYW5pdHkgY2hlY2sgaW4gQVJNCisjZW5kaWYKIAlzdWJlcQlyMiwka2V5LCMyMTYKIAliZXEJLkxkb25lCiAKQEAgLTY0NSw2ICs2NzksOSBAQCBfYXJtdjRfQUVTX3NldF9lbmNyeXB0X2tleToKIAlzdHIJJHMyLFska2V5LCMtMjRdCiAJc3Vicwkkcm91bmRzLCRyb3VuZHMsIzEKIAlzdHIJJHMzLFska2V5LCMtMjBdCisjaWYgX19BUk1fQVJDSF9fPj03CisJaXR0CWVxCQkJCUAgVGh1bWIyIHRoaW5nLCBzYW5pdHkgY2hlY2sgaW4gQVJNCisjZW5kaWYKIAlzdWJlcQlyMiwka2V5LCMyNTYKIAliZXEJLkxkb25lCiAKQEAgLTY3NCwxMSArNzExLDE3IEBAIF9hcm12NF9BRVNfc2V0X2VuY3J5cHRfa2V5OgogCXN0cgkkaTMsWyRrZXksIy00XQogCWIJLkwyNTZfbG9vcAogCisuYWxpZ24JMgogLkxkb25lOgltb3YJcjAsIzAKIAlsZG1pYSAgIHNwISx7cjQtcjEyLGxyfQotLkxhYnJ0Ogl0c3QJbHIsIzEKKy5MYWJydDoKKyNpZiBfX0FSTV9BUkNIX18+PTUKKwlyZXQJCQkJQCBieCBscgorI2Vsc2UKKwl0c3QJbHIsIzEKIAltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CiAJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKyNlbmRpZgogLnNpemUJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5LC4tcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CiAKIC5nbG9iYWwgcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5CkBAIC02ODgsMzQgKzczMSw1NyBAQCBwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXk6CiAJc3RyCWxyLFtzcCwjLTRdISAgICAgICAgICAgIEAgcHVzaCBscgogCWJsCV9hcm12NF9BRVNfc2V0X2VuY3J5cHRfa2V5CiAJdGVxCXIwLCMwCi0JbGRybmUJbHIsW3NwXSwjNCAgICAgICAgICAgICAgQCBwb3AgbHIKKwlsZHIJbHIsW3NwXSwjNCAgICAgICAgICAgICAgQCBwb3AgbHIKIAlibmUJLkxhYnJ0CiAKLQlzdG1kYiAgIHNwISx7cjQtcjEyfQorCW1vdglyMCxyMgkJCUAgQUVTX3NldF9lbmNyeXB0X2tleSBwcmVzZXJ2ZXMgcjIsCisJbW92CXIxLHIyCQkJQCB3aGljaCBpcyBBRVNfS0VZICprZXkKKwliCV9hcm12NF9BRVNfc2V0X2VuYzJkZWNfa2V5Cisuc2l6ZQlwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXksLi1wcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKIAotCWxkcgkkcm91bmRzLFtyMiwjMjQwXQlAIEFFU19zZXRfZW5jcnlwdF9rZXkgcHJlc2VydmVzIHIyLAotCW1vdgkka2V5LHIyCQkJQCB3aGljaCBpcyBBRVNfS0VZICprZXkKLQltb3YJJGkxLHIyCi0JYWRkCSRpMixyMiwkcm91bmRzLGxzbCM0CitAIHZvaWQgQUVTX3NldF9lbmMyZGVjX2tleShjb25zdCBBRVNfS0VZICppbnAsQUVTX0tFWSAqb3V0KQorLmdsb2JhbAlBRVNfc2V0X2VuYzJkZWNfa2V5CisudHlwZQlBRVNfc2V0X2VuYzJkZWNfa2V5LCVmdW5jdGlvbgorLmFsaWduCTUKK0FFU19zZXRfZW5jMmRlY19rZXk6CitfYXJtdjRfQUVTX3NldF9lbmMyZGVjX2tleToKKwlzdG1kYiAgIHNwISx7cjQtcjEyLGxyfQorCisJbGRyCSRyb3VuZHMsW3IwLCMyNDBdCisJbW92CSRpMSxyMAkJCUAgaW5wdXQKKwlhZGQJJGkyLHIwLCRyb3VuZHMsbHNsIzQKKwltb3YJJGtleSxyMQkJCUAgb3VwdXQKKwlhZGQJJHRibCxyMSwkcm91bmRzLGxzbCM0CisJc3RyCSRyb3VuZHMsW3IxLCMyNDBdCisKKy5MaW52OglsZHIJJHMwLFskaTFdLCMxNgorCWxkcgkkczEsWyRpMSwjLTEyXQorCWxkcgkkczIsWyRpMSwjLThdCisJbGRyCSRzMyxbJGkxLCMtNF0KKwlsZHIJJHQxLFskaTJdLCMtMTYKKwlsZHIJJHQyLFskaTIsIzE2KzRdCisJbGRyCSR0MyxbJGkyLCMxNis4XQorCWxkcgkkaTMsWyRpMiwjMTYrMTJdCisJc3RyCSRzMCxbJHRibF0sIy0xNgorCXN0cgkkczEsWyR0YmwsIzE2KzRdCisJc3RyCSRzMixbJHRibCwjMTYrOF0KKwlzdHIJJHMzLFskdGJsLCMxNisxMl0KKwlzdHIJJHQxLFska2V5XSwjMTYKKwlzdHIJJHQyLFska2V5LCMtMTJdCisJc3RyCSR0MyxbJGtleSwjLThdCisJc3RyCSRpMyxbJGtleSwjLTRdCisJdGVxCSRpMSwkaTIKKwlibmUJLkxpbnYKIAotLkxpbnY6CWxkcgkkczAsWyRpMV0KKwlsZHIJJHMwLFskaTFdCiAJbGRyCSRzMSxbJGkxLCM0XQogCWxkcgkkczIsWyRpMSwjOF0KIAlsZHIJJHMzLFskaTEsIzEyXQotCWxkcgkkdDEsWyRpMl0KLQlsZHIJJHQyLFskaTIsIzRdCi0JbGRyCSR0MyxbJGkyLCM4XQotCWxkcgkkaTMsWyRpMiwjMTJdCi0Jc3RyCSRzMCxbJGkyXSwjLTE2Ci0Jc3RyCSRzMSxbJGkyLCMxNis0XQotCXN0cgkkczIsWyRpMiwjMTYrOF0KLQlzdHIJJHMzLFskaTIsIzE2KzEyXQotCXN0cgkkdDEsWyRpMV0sIzE2Ci0Jc3RyCSR0MixbJGkxLCMtMTJdCi0Jc3RyCSR0MyxbJGkxLCMtOF0KLQlzdHIJJGkzLFskaTEsIy00XQotCXRlcQkkaTEsJGkyCi0JYm5lCS5MaW52CisJc3RyCSRzMCxbJGtleV0KKwlzdHIJJHMxLFska2V5LCM0XQorCXN0cgkkczIsWyRrZXksIzhdCisJc3RyCSRzMyxbJGtleSwjMTJdCisJc3ViCSRrZXksJGtleSwkcm91bmRzLGxzbCMzCiBfX18KICRtYXNrODA9JGkxOwogJG1hc2sxYj0kaTI7CkBAIC03NzMsNyArODM5LDcgQEAgJGNvZGUuPTw8X19fOwogCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKIAlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQogI2VuZGlmCi0uc2l6ZQlwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXksLi1wcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKKy5zaXplCUFFU19zZXRfZW5jMmRlY19rZXksLi1BRVNfc2V0X2VuYzJkZWNfa2V5CiAKIC50eXBlCUFFU19UZCwlb2JqZWN0CiAuYWxpZ24JNQpAQCAtODgzLDcgKzk0OSwxMSBAQCBBRVNfVGQ6CiAudHlwZSAgIEFFU19kZWNyeXB0LCVmdW5jdGlvbgogLmFsaWduCTUKIEFFU19kZWNyeXB0OgorI2lmIF9fQVJNX0FSQ0hfXzw3CiAJc3ViCXIzLHBjLCM4CQlAIEFFU19kZWNyeXB0CisjZWxzZQorCWFkcglyMyxBRVNfZGVjcnlwdAorI2VuZGlmCiAJc3RtZGIgICBzcCEse3IxLHI0LXIxMixscn0KIAltb3YJJHJvdW5kcyxyMAkJQCBpbnAKIAltb3YJJGtleSxyMgpAQCAtMTA4MCw4ICsxMTUwLDkgQEAgX2FybXY0X0FFU19kZWNyeXB0OgogCWxkcmIJJHQzLFskdGJsLCRpM10JCUAgVGQ0W3MwPj4wXQogCWFuZAkkaTMsbHIsJHMxLGxzciM4CiAKKwlhZGQJJHMxLCR0YmwsJHMxLGxzciMyNAogCWxkcmIJJGkxLFskdGJsLCRpMV0JCUAgVGQ0W3MxPj4wXQotCWxkcmIJJHMxLFskdGJsLCRzMSxsc3IjMjRdCUAgVGQ0W3MxPj4yNF0KKwlsZHJiCSRzMSxbJHMxXQkJQCBUZDRbczE+PjI0XQogCWxkcmIJJGkyLFskdGJsLCRpMl0JCUAgVGQ0W3MxPj4xNl0KIAllb3IJJHMwLCRpMSwkczAsbHNsIzI0CiAJbGRyYgkkaTMsWyR0YmwsJGkzXQkJQCBUZDRbczE+PjhdCkBAIC0xMDk0LDcgKzExNjUsOCBAQCBfYXJtdjRfQUVTX2RlY3J5cHQ6CiAJbGRyYgkkaTIsWyR0YmwsJGkyXQkJQCBUZDRbczI+PjBdCiAJYW5kCSRpMyxsciwkczIsbHNyIzE2CiAKLQlsZHJiCSRzMixbJHRibCwkczIsbHNyIzI0XQlAIFRkNFtzMj4+MjRdCisJYWRkCSRzMiwkdGJsLCRzMixsc3IjMjQKKwlsZHJiCSRzMixbJHMyXQkJQCBUZDRbczI+PjI0XQogCWVvcgkkczAsJHMwLCRpMSxsc2wjOAogCWxkcmIJJGkzLFskdGJsLCRpM10JCUAgVGQ0W3MyPj4xNl0KIAllb3IJJHMxLCRpMiwkczEsbHNsIzE2CkBAIC0xMTA2LDggKzExNzgsOSBAQCBfYXJtdjRfQUVTX2RlY3J5cHQ6CiAJbGRyYgkkaTIsWyR0YmwsJGkyXQkJQCBUZDRbczM+PjhdCiAJYW5kCSRpMyxsciwkczMJCUAgaTIKIAorCWFkZAkkczMsJHRibCwkczMsbHNyIzI0CiAJbGRyYgkkaTMsWyR0YmwsJGkzXQkJQCBUZDRbczM+PjBdCi0JbGRyYgkkczMsWyR0YmwsJHMzLGxzciMyNF0JQCBUZDRbczM+PjI0XQorCWxkcmIJJHMzLFskczNdCQlAIFRkNFtzMz4+MjRdCiAJZW9yCSRzMCwkczAsJGkxLGxzbCMxNgogCWxkcgkkaTEsWyRrZXksIzBdCiAJZW9yCSRzMSwkczEsJGkyLGxzbCM4CkBAIC0xMTMwLDUgKzEyMDMsMTUgQEAgX2FybXY0X0FFU19kZWNyeXB0OgogX19fCiAKICRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0CiskY29kZSA9fiBzL1xicmV0XGIvYnhcdGxyL2dtOworCitvcGVuIFNFTEYsJDA7Cit3aGlsZSg8U0VMRj4pIHsKKwluZXh0IGlmICgvXiMhLyk7CisJbGFzdCBpZiAoIXMvXiMvQC8gYW5kICEvXiQvKTsKKwlwcmludDsKK30KK2Nsb3NlIFNFTEY7CisKIHByaW50ICRjb2RlOwogY2xvc2UgU1RET1VUOwkjIGVuZm9yY2UgZmx1c2gKZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYXNtL2Flc3Y4LWFybXgucGwgYi9jcnlwdG8vYWVzL2FzbS9hZXN2OC1hcm14LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxNWRjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYWVzL2FzbS9hZXN2OC1hcm14LnBsCkBAIC0wLDAgKzEsOTgwIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEFSTXY4IEFFUyBpbnN0cnVjdGlvbnMuIFRoZQorIyBtb2R1bGUgaXMgZW5kaWFuLWFnbm9zdGljIGluIHNlbnNlIHRoYXQgaXQgc3VwcG9ydHMgYm90aCBiaWctIGFuZAorIyBsaXR0bGUtZW5kaWFuIGNhc2VzLiBBcyBkb2VzIGl0IHN1cHBvcnQgYm90aCAzMi0gYW5kIDY0LWJpdCBtb2RlcworIyBvZiBvcGVyYXRpb24uIExhdHRlciBpcyBhY2hpZXZlZCBieSBsaW1pdGluZyBhbW91bnQgb2YgdXRpbGl6ZWQKKyMgcmVnaXN0ZXJzIHRvIDE2LCB3aGljaCBpbXBsaWVzIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zLiBUaGlzIGhhcworIyBubyBlZmZlY3Qgb24gbWlnaHR5IEFwcGxlIEE3LCBhcyByZXN1bHRzIGFyZSBsaXRlcmFsbHkgZXF1YWwgdG8KKyMgdGhlIHRoZW9yZXRpY2FsIGVzdGltYXRlcyBiYXNlZCBvbiBpbnN0cnVjdGlvbiBsYXRlbmNpZXMgYW5kIGlzc3VlCisjIHJhdGUuIEl0IHJlbWFpbnMgdG8gYmUgc2VlbiBob3cgZG9lcyBpdCBhZmZlY3Qgb3RoZXIgcGxhdGZvcm1zLi4uCisjCisjIFBlcmZvcm1hbmNlIGluIGN5Y2xlcyBwZXIgYnl0ZSBwcm9jZXNzZWQgd2l0aCAxMjgtYml0IGtleToKKyMKKyMJCUNCQyBlbmMJCUNCQyBkZWMJCUNUUgorIyBBcHBsZSBBNwkyLjM5CQkxLjIwCQkxLjIwCisjIENvcnRleC1BNXgJbi9hCQluL2EJCW4vYQorCiskZmxhdm91ciA9IHNoaWZ0Oworb3BlbiBTVERPVVQsIj4iLnNoaWZ0OworCiskcHJlZml4PSJhZXNfdjgiOworCiskY29kZT08PF9fXzsKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgorCisjaWYgX19BUk1fQVJDSF9fPj03CisudGV4dAorX19fCiskY29kZS49Ii5hcmNoCWFybXY4LWErY3J5cHRvXG4iCWlmICgkZmxhdm91ciA9fiAvNjQvKTsKKyRjb2RlLj0iLmZwdQluZW9uXG4uY29kZQkzMlxuIglpZiAoJGZsYXZvdXIgIX4gLzY0Lyk7CisKKyMgQXNzZW1ibGVyIG1uZW1vbmljcyBhcmUgYW4gZWNsZWN0aWMgbWl4IG9mIDMyLSBhbmQgNjQtYml0IHN5bnRheCwKKyMgTkVPTiBpcyBtb3N0bHkgMzItYml0IG1uZW1vbmljcywgaW50ZWdlciAtIG1vc3RseSA2NC4gR29hbCBpcyB0bworIyBtYWludGFpbiBib3RoIDMyLSBhbmQgNjQtYml0IGNvZGVzIHdpdGhpbiBzaW5nbGUgbW9kdWxlIGFuZAorIyB0cmFuc2xpdGVyYXRlIGNvbW1vbiBjb2RlIHRvIGVpdGhlciBmbGF2b3VyIHdpdGggcmVnZXggdm9kb28uCisjCit7e3sKK215ICgkaW5wLCRiaXRzLCRvdXQsJHB0ciwkcm91bmRzKT0oIngwIiwidzEiLCJ4MiIsIngzIiwidzEyIik7CitteSAoJHplcm8sJHJjb24sJG1hc2ssJGluMCwkaW4xLCR0bXAsJGtleSk9CisJJGZsYXZvdXI9fi82NC8/IG1hcCgicSRfIiwoMC4uNikpIDogbWFwKCJxJF8iLCgwLi4zLDguLjEwKSk7CisKKworJGNvZGUuPTw8X19fOworLmFsaWduCTUKK3Jjb246CisubG9uZwkweDAxLDB4MDEsMHgwMSwweDAxCisubG9uZwkweDBjMGYwZTBkLDB4MGMwZjBlMGQsMHgwYzBmMGUwZCwweDBjMGYwZTBkCS8vIHJvdGF0ZS1uLXNwbGF0CisubG9uZwkweDFiLDB4MWIsMHgxYiwweDFiCisKKy5nbG9ibAkke3ByZWZpeH1fc2V0X2VuY3J5cHRfa2V5CisudHlwZQkke3ByZWZpeH1fc2V0X2VuY3J5cHRfa2V5LCVmdW5jdGlvbgorLmFsaWduCTUKKyR7cHJlZml4fV9zZXRfZW5jcnlwdF9rZXk6CisuTGVuY19rZXk6CitfX18KKyRjb2RlLj08PF9fXwlpZiAoJGZsYXZvdXIgPX4gLzY0Lyk7CisJc3RwCXgyOSx4MzAsW3NwLCMtMTZdIQorCWFkZAl4Mjksc3AsIzAKK19fXworJGNvZGUuPTw8X19fOworCWFkcgkkcHRyLHJjb24KKwljbXAJJGJpdHMsIzE5MgorCisJdmVvcgkkemVybywkemVybywkemVybworCXZsZDEuOAl7JGluMH0sWyRpbnBdLCMxNgorCW1vdgkkYml0cywjOAkJLy8gcmV1c2UgJGJpdHMKKwl2bGQxLjMyCXskcmNvbiwkbWFza30sWyRwdHJdLCMzMgorCisJYi5sdAkuTG9vcDEyOAorCWIuZXEJLkwxOTIKKwliCS5MMjU2CisKKy5hbGlnbgk0CisuTG9vcDEyODoKKwl2dGJsLjgJJGtleSx7JGluMH0sJG1hc2sKKwl2ZXh0LjgJJHRtcCwkemVybywkaW4wLCMxMgorCXZzdDEuMzIJeyRpbjB9LFskb3V0XSwjMTYKKwlhZXNlCSRrZXksJHplcm8KKwlzdWJzCSRiaXRzLCRiaXRzLCMxCisKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwkgdmVvcgkka2V5LCRrZXksJHJjb24KKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdnNobC51OAkkcmNvbiwkcmNvbiwjMQorCXZlb3IJJGluMCwkaW4wLCRrZXkKKwliLm5lCS5Mb29wMTI4CisKKwl2bGQxLjMyCXskcmNvbn0sWyRwdHJdCisKKwl2dGJsLjgJJGtleSx7JGluMH0sJG1hc2sKKwl2ZXh0LjgJJHRtcCwkemVybywkaW4wLCMxMgorCXZzdDEuMzIJeyRpbjB9LFskb3V0XSwjMTYKKwlhZXNlCSRrZXksJHplcm8KKworCXZlb3IJJGluMCwkaW4wLCR0bXAKKwl2ZXh0LjgJJHRtcCwkemVybywkdG1wLCMxMgorCXZlb3IJJGluMCwkaW4wLCR0bXAKKwl2ZXh0LjgJJHRtcCwkemVybywkdG1wLCMxMgorCSB2ZW9yCSRrZXksJGtleSwkcmNvbgorCXZlb3IJJGluMCwkaW4wLCR0bXAKKwl2c2hsLnU4CSRyY29uLCRyY29uLCMxCisJdmVvcgkkaW4wLCRpbjAsJGtleQorCisJdnRibC44CSRrZXkseyRpbjB9LCRtYXNrCisJdmV4dC44CSR0bXAsJHplcm8sJGluMCwjMTIKKwl2c3QxLjMyCXskaW4wfSxbJG91dF0sIzE2CisJYWVzZQkka2V5LCR6ZXJvCisKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwkgdmVvcgkka2V5LCRrZXksJHJjb24KKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmVvcgkkaW4wLCRpbjAsJGtleQorCXZzdDEuMzIJeyRpbjB9LFskb3V0XQorCWFkZAkkb3V0LCRvdXQsIzB4NTAKKworCW1vdgkkcm91bmRzLCMxMAorCWIJLkxkb25lCisKKy5hbGlnbgk0CisuTDE5MjoKKwl2bGQxLjgJeyRpbjF9LFskaW5wXSwjOAorCXZtb3YuaTgJJGtleSwjOAkJCS8vIGJvcnJvdyAka2V5CisJdnN0MS4zMgl7JGluMH0sWyRvdXRdLCMxNgorCXZzdWIuaTgJJG1hc2ssJG1hc2ssJGtleQkvLyBhZGp1c3QgdGhlIG1hc2sKKworLkxvb3AxOTI6CisJdnRibC44CSRrZXkseyRpbjF9LCRtYXNrCisJdmV4dC44CSR0bXAsJHplcm8sJGluMCwjMTIKKwl2c3QxLjMyCXskaW4xfSxbJG91dF0sIzgKKwlhZXNlCSRrZXksJHplcm8KKwlzdWJzCSRiaXRzLCRiaXRzLCMxCisKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisKKwl2ZHVwLjMyCSR0bXAsJHtpbjB9WzNdCisJdmVvcgkkdG1wLCR0bXAsJGluMQorCSB2ZW9yCSRrZXksJGtleSwkcmNvbgorCXZleHQuOAkkaW4xLCR6ZXJvLCRpbjEsIzEyCisJdnNobC51OAkkcmNvbiwkcmNvbiwjMQorCXZlb3IJJGluMSwkaW4xLCR0bXAKKwl2ZW9yCSRpbjAsJGluMCwka2V5CisJdmVvcgkkaW4xLCRpbjEsJGtleQorCXZzdDEuMzIJeyRpbjB9LFskb3V0XSwjMTYKKwliLm5lCS5Mb29wMTkyCisKKwltb3YJJHJvdW5kcywjMTIKKwlhZGQJJG91dCwkb3V0LCMweDIwCisJYgkuTGRvbmUKKworLmFsaWduCTQKKy5MMjU2OgorCXZsZDEuOAl7JGluMX0sWyRpbnBdCisJbW92CSRiaXRzLCM3CisJbW92CSRyb3VuZHMsIzE0CisJdnN0MS4zMgl7JGluMH0sWyRvdXRdLCMxNgorCisuTG9vcDI1NjoKKwl2dGJsLjgJJGtleSx7JGluMX0sJG1hc2sKKwl2ZXh0LjgJJHRtcCwkemVybywkaW4wLCMxMgorCXZzdDEuMzIJeyRpbjF9LFskb3V0XSwjMTYKKwlhZXNlCSRrZXksJHplcm8KKwlzdWJzCSRiaXRzLCRiaXRzLCMxCisKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdmV4dC44CSR0bXAsJHplcm8sJHRtcCwjMTIKKwkgdmVvcgkka2V5LCRrZXksJHJjb24KKwl2ZW9yCSRpbjAsJGluMCwkdG1wCisJdnNobC51OAkkcmNvbiwkcmNvbiwjMQorCXZlb3IJJGluMCwkaW4wLCRrZXkKKwl2c3QxLjMyCXskaW4wfSxbJG91dF0sIzE2CisJYi5lcQkuTGRvbmUKKworCXZkdXAuMzIJJGtleSwke2luMH1bM10JCS8vIGp1c3Qgc3BsYXQKKwl2ZXh0LjgJJHRtcCwkemVybywkaW4xLCMxMgorCWFlc2UJJGtleSwkemVybworCisJdmVvcgkkaW4xLCRpbjEsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJdmVvcgkkaW4xLCRpbjEsJHRtcAorCXZleHQuOAkkdG1wLCR6ZXJvLCR0bXAsIzEyCisJdmVvcgkkaW4xLCRpbjEsJHRtcAorCisJdmVvcgkkaW4xLCRpbjEsJGtleQorCWIJLkxvb3AyNTYKKworLkxkb25lOgorCXN0cgkkcm91bmRzLFskb3V0XQorCisJZW9yCXgwLHgwLHgwCQkvLyByZXR1cm4gdmFsdWUKKwlgImxkcgl4MjksW3NwXSwjMTYiCQlpZiAoJGZsYXZvdXIgPX4gLzY0LylgCisJcmV0Cisuc2l6ZQkke3ByZWZpeH1fc2V0X2VuY3J5cHRfa2V5LC4tJHtwcmVmaXh9X3NldF9lbmNyeXB0X2tleQorCisuZ2xvYmwJJHtwcmVmaXh9X3NldF9kZWNyeXB0X2tleQorLnR5cGUJJHtwcmVmaXh9X3NldF9kZWNyeXB0X2tleSwlZnVuY3Rpb24KKy5hbGlnbgk1Ciske3ByZWZpeH1fc2V0X2RlY3J5cHRfa2V5OgorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCXN0cAl4MjkseDMwLFtzcCwjLTE2XSEKKwlhZGQJeDI5LHNwLCMwCitfX18KKyRjb2RlLj08PF9fXwlpZiAoJGZsYXZvdXIgIX4gLzY0Lyk7CisJc3RtZGIJc3AhLHtyNCxscn0KK19fXworJGNvZGUuPTw8X19fOworCWJsCS5MZW5jX2tleQorCisJc3ViCSRvdXQsJG91dCwjMjQwCQkvLyByZXN0b3JlIG9yaWdpbmFsICRvdXQKKwltb3YJeDQsIy0xNgorCWFkZAkkaW5wLCRvdXQseDEyLGxzbCM0CS8vIGVuZCBvZiBrZXkgc2NoZWR1bGUKKworCXZsZDEuMzIJe3YwLjE2Yn0sWyRvdXRdCisJdmxkMS4zMgl7djEuMTZifSxbJGlucF0KKwl2c3QxLjMyCXt2MC4xNmJ9LFskaW5wXSx4NAorCXZzdDEuMzIJe3YxLjE2Yn0sWyRvdXRdLCMxNgorCisuTG9vcF9pbWM6CisJdmxkMS4zMgl7djAuMTZifSxbJG91dF0KKwl2bGQxLjMyCXt2MS4xNmJ9LFskaW5wXQorCWFlc2ltYwl2MC4xNmIsdjAuMTZiCisJYWVzaW1jCXYxLjE2Yix2MS4xNmIKKwl2c3QxLjMyCXt2MC4xNmJ9LFskaW5wXSx4NAorCXZzdDEuMzIJe3YxLjE2Yn0sWyRvdXRdLCMxNgorCWNtcAkkaW5wLCRvdXQKKwliLmhpCS5Mb29wX2ltYworCisJdmxkMS4zMgl7djAuMTZifSxbJG91dF0KKwlhZXNpbWMJdjAuMTZiLHYwLjE2YgorCXZzdDEuMzIJe3YwLjE2Yn0sWyRpbnBdCisKKwllb3IJeDAseDAseDAJCS8vIHJldHVybiB2YWx1ZQorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyICF+IC82NC8pOworCWxkbWlhCXNwISx7cjQscGN9CitfX18KKyRjb2RlLj08PF9fXwlpZiAoJGZsYXZvdXIgPX4gLzY0Lyk7CisJbGRwCXgyOSx4MzAsW3NwXSwjMTYKKwlyZXQKK19fXworJGNvZGUuPTw8X19fOworLnNpemUJJHtwcmVmaXh9X3NldF9kZWNyeXB0X2tleSwuLSR7cHJlZml4fV9zZXRfZGVjcnlwdF9rZXkKK19fXworfX19Cit7e3sKK3N1YiBnZW5fYmxvY2sgKCkgeworbXkgJGRpciA9IHNoaWZ0OworbXkgKCRlLCRtYykgPSAkZGlyIGVxICJlbiIgPyAoImUiLCJtYyIpIDogKCJkIiwiaW1jIik7CitteSAoJGlucCwkb3V0LCRrZXkpPW1hcCgieCRfIiwoMC4uMikpOworbXkgJHJvdW5kcz0idzMiOworbXkgKCRybmRrZXkwLCRybmRrZXkxLCRpbm91dCk9bWFwKCJxJF8iLCgwLi4zKSk7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAkke3ByZWZpeH1fJHtkaXJ9Y3J5cHQKKy50eXBlCSR7cHJlZml4fV8ke2Rpcn1jcnlwdCwlZnVuY3Rpb24KKy5hbGlnbgk1Ciske3ByZWZpeH1fJHtkaXJ9Y3J5cHQ6CisJbGRyCSRyb3VuZHMsWyRrZXksIzI0MF0KKwl2bGQxLjMyCXskcm5ka2V5MH0sWyRrZXldLCMxNgorCXZsZDEuOAl7JGlub3V0fSxbJGlucF0KKwlzdWIJJHJvdW5kcywkcm91bmRzLCMyCisJdmxkMS4zMgl7JHJuZGtleTF9LFska2V5XSwjMTYKKworLkxvb3BfJHtkaXJ9YzoKKwlhZXMkZQkkaW5vdXQsJHJuZGtleTAKKwl2bGQxLjMyCXskcm5ka2V5MH0sWyRrZXldLCMxNgorCWFlcyRtYwkkaW5vdXQsJGlub3V0CisJc3Vicwkkcm91bmRzLCRyb3VuZHMsIzIKKwlhZXMkZQkkaW5vdXQsJHJuZGtleTEKKwl2bGQxLjMyCXskcm5ka2V5MX0sWyRrZXldLCMxNgorCWFlcyRtYwkkaW5vdXQsJGlub3V0CisJYi5ndAkuTG9vcF8ke2Rpcn1jCisKKwlhZXMkZQkkaW5vdXQsJHJuZGtleTAKKwl2bGQxLjMyCXskcm5ka2V5MH0sWyRrZXldCisJYWVzJG1jCSRpbm91dCwkaW5vdXQKKwlhZXMkZQkkaW5vdXQsJHJuZGtleTEKKwl2ZW9yCSRpbm91dCwkaW5vdXQsJHJuZGtleTAKKworCXZzdDEuOAl7JGlub3V0fSxbJG91dF0KKwlyZXQKKy5zaXplCSR7cHJlZml4fV8ke2Rpcn1jcnlwdCwuLSR7cHJlZml4fV8ke2Rpcn1jcnlwdAorX19fCit9CismZ2VuX2Jsb2NrKCJlbiIpOworJmdlbl9ibG9jaygiZGUiKTsKK319fQore3t7CitteSAoJGlucCwkb3V0LCRsZW4sJGtleSwkaXZwKT1tYXAoIngkXyIsKDAuLjQpKTsgbXkgJGVuYz0idzUiOworbXkgKCRyb3VuZHMsJGNudCwka2V5Xywkc3RlcCwkc3RlcDEpPSgkZW5jLCJ3NiIsIng3IiwieDgiLCJ4MTIiKTsKK215ICgkZGF0MCwkZGF0MSwkaW4wLCRpbjEsJHRtcDAsJHRtcDEsJGl2ZWMsJHJuZGxhc3QpPW1hcCgicSRfIiwoMC4uNykpOworCitteSAoJGRhdCwkdG1wLCRybmR6ZXJvX25fbGFzdCk9KCRkYXQwLCR0bXAwLCR0bXAxKTsKKworIyMjIHE4LXExNQlwcmVsb2FkZWQga2V5IHNjaGVkdWxlCisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAkke3ByZWZpeH1fY2JjX2VuY3J5cHQKKy50eXBlCSR7cHJlZml4fV9jYmNfZW5jcnlwdCwlZnVuY3Rpb24KKy5hbGlnbgk1Ciske3ByZWZpeH1fY2JjX2VuY3J5cHQ6CitfX18KKyRjb2RlLj08PF9fXwlpZiAoJGZsYXZvdXIgPX4gLzY0Lyk7CisJc3RwCXgyOSx4MzAsW3NwLCMtMTZdIQorCWFkZAl4Mjksc3AsIzAKK19fXworJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciAhfiAvNjQvKTsKKwltb3YJaXAsc3AKKwlzdG1kYglzcCEse3I0LXI4LGxyfQorCXZzdG1kYglzcCEse2Q4LWQxNX0gICAgICAgICAgICBAIEFCSSBzcGVjaWZpY2F0aW9uIHNheXMgc28KKwlsZG1pYQlpcCx7cjQtcjV9CQlAIGxvYWQgcmVtYWluaW5nIGFyZ3MKK19fXworJGNvZGUuPTw8X19fOworCXN1YnMJJGxlbiwkbGVuLCMxNgorCW1vdgkkc3RlcCwjMTYKKwliLmxvCS5MY2JjX2Fib3J0CisJY2Nscgkkc3RlcCxlcQorCisJY21wCSRlbmMsIzAJCQkvLyBlbi0gb3IgZGVjcnlwdGluZz8KKwlsZHIJJHJvdW5kcyxbJGtleSwjMjQwXQorCWFuZAkkbGVuLCRsZW4sIy0xNgorCXZsZDEuOAl7JGl2ZWN9LFskaXZwXQorCXZsZDEuOAl7JGRhdH0sWyRpbnBdLCRzdGVwCisKKwl2bGQxLjMyCXtxOC1xOX0sWyRrZXldCQkvLyBsb2FkIGtleSBzY2hlZHVsZS4uLgorCXN1Ygkkcm91bmRzLCRyb3VuZHMsIzYKKwlhZGQJJGtleV8sJGtleSx4NSxsc2wjNAkvLyBwb2ludGVyIHRvIGxhc3QgNyByb3VuZCBrZXlzCisJc3ViCSRyb3VuZHMsJHJvdW5kcywjMgorCXZsZDEuMzIJe3ExMC1xMTF9LFska2V5X10sIzMyCisJdmxkMS4zMgl7cTEyLXExM30sWyRrZXlfXSwjMzIKKwl2bGQxLjMyCXtxMTQtcTE1fSxbJGtleV9dLCMzMgorCXZsZDEuMzIJeyRybmRsYXN0fSxbJGtleV9dCisKKwlhZGQJJGtleV8sJGtleSwjMzIKKwltb3YJJGNudCwkcm91bmRzCisJYi5lcQkuTGNiY19kZWMKKworCWNtcAkkcm91bmRzLCMyCisJdmVvcgkkZGF0LCRkYXQsJGl2ZWMKKwl2ZW9yCSRybmR6ZXJvX25fbGFzdCxxOCwkcm5kbGFzdAorCWIuZXEJLkxjYmNfZW5jMTI4CisKKy5Mb29wX2NiY19lbmM6CisJYWVzZQkkZGF0LHE4CisJdmxkMS4zMgl7cTh9LFska2V5X10sIzE2CisJYWVzbWMJJGRhdCwkZGF0CisJc3VicwkkY250LCRjbnQsIzIKKwlhZXNlCSRkYXQscTkKKwl2bGQxLjMyCXtxOX0sWyRrZXlfXSwjMTYKKwlhZXNtYwkkZGF0LCRkYXQKKwliLmd0CS5Mb29wX2NiY19lbmMKKworCWFlc2UJJGRhdCxxOAorCWFlc21jCSRkYXQsJGRhdAorCSBzdWJzCSRsZW4sJGxlbiwjMTYKKwlhZXNlCSRkYXQscTkKKwlhZXNtYwkkZGF0LCRkYXQKKwkgY2Nscgkkc3RlcCxlcQorCWFlc2UJJGRhdCxxMTAKKwlhZXNtYwkkZGF0LCRkYXQKKwkgYWRkCSRrZXlfLCRrZXksIzE2CisJYWVzZQkkZGF0LHExMQorCWFlc21jCSRkYXQsJGRhdAorCSB2bGQxLjgJe3E4fSxbJGlucF0sJHN0ZXAKKwlhZXNlCSRkYXQscTEyCisJYWVzbWMJJGRhdCwkZGF0CisJIHZlb3IJcTgscTgsJHJuZHplcm9fbl9sYXN0CisJYWVzZQkkZGF0LHExMworCWFlc21jCSRkYXQsJGRhdAorCSB2bGQxLjMyIHtxOX0sWyRrZXlfXSwjMTYJLy8gcmUtcHJlLWxvYWQgcm5ka2V5WzFdCisJYWVzZQkkZGF0LHExNAorCWFlc21jCSRkYXQsJGRhdAorCWFlc2UJJGRhdCxxMTUKKworCSBtb3YJJGNudCwkcm91bmRzCisJdmVvcgkkaXZlYywkZGF0LCRybmRsYXN0CisJdnN0MS44CXskaXZlY30sWyRvdXRdLCMxNgorCWIuaHMJLkxvb3BfY2JjX2VuYworCisJYgkuTGNiY19kb25lCisKKy5hbGlnbgk1CisuTGNiY19lbmMxMjg6CisJdmxkMS4zMgl7JGluMC0kaW4xfSxbJGtleV9dCisJYWVzZQkkZGF0LHE4CisJYWVzbWMJJGRhdCwkZGF0CisJYgkuTGVudGVyX2NiY19lbmMxMjgKKy5Mb29wX2NiY19lbmMxMjg6CisJYWVzZQkkZGF0LHE4CisJYWVzbWMJJGRhdCwkZGF0CisJIHZzdDEuOAl7JGl2ZWN9LFskb3V0XSwjMTYKKy5MZW50ZXJfY2JjX2VuYzEyODoKKwlhZXNlCSRkYXQscTkKKwlhZXNtYwkkZGF0LCRkYXQKKwkgc3VicwkkbGVuLCRsZW4sIzE2CisJYWVzZQkkZGF0LCRpbjAKKwlhZXNtYwkkZGF0LCRkYXQKKwkgY2Nscgkkc3RlcCxlcQorCWFlc2UJJGRhdCwkaW4xCisJYWVzbWMJJGRhdCwkZGF0CisJYWVzZQkkZGF0LHExMAorCWFlc21jCSRkYXQsJGRhdAorCWFlc2UJJGRhdCxxMTEKKwlhZXNtYwkkZGF0LCRkYXQKKwkgdmxkMS44CXtxOH0sWyRpbnBdLCRzdGVwCisJYWVzZQkkZGF0LHExMgorCWFlc21jCSRkYXQsJGRhdAorCWFlc2UJJGRhdCxxMTMKKwlhZXNtYwkkZGF0LCRkYXQKKwlhZXNlCSRkYXQscTE0CisJYWVzbWMJJGRhdCwkZGF0CisJIHZlb3IJcTgscTgsJHJuZHplcm9fbl9sYXN0CisJYWVzZQkkZGF0LHExNQorCXZlb3IJJGl2ZWMsJGRhdCwkcm5kbGFzdAorCWIuaHMJLkxvb3BfY2JjX2VuYzEyOAorCisJdnN0MS44CXskaXZlY30sWyRvdXRdLCMxNgorCWIJLkxjYmNfZG9uZQorCisuYWxpZ24JNQorLkxjYmNfZGVjMTI4OgorCXZsZDEuMzIJeyR0bXAwLSR0bXAxfSxbJGtleV9dCisJdmVvcgkkaXZlYywkaXZlYywkcm5kbGFzdAorCXZlb3IJJGluMCwkZGF0MCwkcm5kbGFzdAorCW1vdgkkc3RlcDEsJHN0ZXAKKworLkxvb3AyeF9jYmNfZGVjMTI4OgorCWFlc2QJJGRhdDAscTgKKwlhZXNkCSRkYXQxLHE4CisJYWVzaW1jCSRkYXQwLCRkYXQwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJIHN1YnMJJGxlbiwkbGVuLCMzMgorCWFlc2QJJGRhdDAscTkKKwlhZXNkCSRkYXQxLHE5CisJYWVzaW1jCSRkYXQwLCRkYXQwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJIGNjbHIJJHN0ZXAsbG8KKwlhZXNkCSRkYXQwLCR0bXAwCisJYWVzZAkkZGF0MSwkdG1wMAorCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCSBjY2xyCSRzdGVwMSxscworCWFlc2QJJGRhdDAsJHRtcDEKKwlhZXNkCSRkYXQxLCR0bXAxCisJYWVzaW1jCSRkYXQwLCRkYXQwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJYWVzZAkkZGF0MCxxMTAKKwlhZXNkCSRkYXQxLHExMAorCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCWFlc2QJJGRhdDAscTExCisJYWVzZAkkZGF0MSxxMTEKKwlhZXNpbWMJJGRhdDAsJGRhdDAKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwlhZXNkCSRkYXQwLHExMgorCWFlc2QJJGRhdDEscTEyCisJYWVzaW1jCSRkYXQwLCRkYXQwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJYWVzZAkkZGF0MCxxMTMKKwlhZXNkCSRkYXQxLHExMworCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCWFlc2QJJGRhdDAscTE0CisJYWVzZAkkZGF0MSxxMTQKKwlhZXNpbWMJJGRhdDAsJGRhdDAKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwlhZXNkCSRkYXQwLHExNQorCWFlc2QJJGRhdDEscTE1CisKKwl2ZW9yCSRpdmVjLCRpdmVjLCRkYXQwCisJdmxkMS44CXskZGF0MH0sWyRpbnBdLCRzdGVwCisJdmVvcgkkaW4wLCRpbjAsJGRhdDEKKwl2bGQxLjgJeyRkYXQxfSxbJGlucF0sJHN0ZXAxCisJdnN0MS44CXskaXZlY30sWyRvdXRdLCMxNgorCXZlb3IJJGl2ZWMsJGluMSwkcm5kbGFzdAorCXZzdDEuOAl7JGluMH0sWyRvdXRdLCMxNgorCXZlb3IJJGluMCwkZGF0MCwkcm5kbGFzdAorCXZvcnIJJGluMSwkZGF0MSwkZGF0MQorCWIuaHMJLkxvb3AyeF9jYmNfZGVjMTI4CisKKwlhZGRzCSRsZW4sJGxlbiwjMzIKKwl2ZW9yCSRpdmVjLCRpdmVjLCRybmRsYXN0CisJYi5lcQkuTGNiY19kb25lCisJdmVvcgkkaW4wLCRpbjAsJHJuZGxhc3QKKwliCS5MY2JjX2RlY190YWlsCisKKy5hbGlnbgk1CisuTGNiY19kZWM6CisJc3VicwkkbGVuLCRsZW4sIzE2CisJdm9ycgkkaW4wLCRkYXQsJGRhdAorCWIubG8JLkxjYmNfZGVjX3RhaWwKKworCWNjbHIJJHN0ZXAsZXEKKwljbXAJJHJvdW5kcywjMgorCXZsZDEuOAl7JGRhdDF9LFskaW5wXSwkc3RlcAorCXZvcnIJJGluMSwkZGF0MSwkZGF0MQorCWIuZXEJLkxjYmNfZGVjMTI4CisKKy5Mb29wMnhfY2JjX2RlYzoKKwlhZXNkCSRkYXQwLHE4CisJYWVzZAkkZGF0MSxxOAorCXZsZDEuMzIJe3E4fSxbJGtleV9dLCMxNgorCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCXN1YnMJJGNudCwkY250LCMyCisJYWVzZAkkZGF0MCxxOQorCWFlc2QJJGRhdDEscTkKKwl2bGQxLjMyCXtxOX0sWyRrZXlfXSwjMTYKKwlhZXNpbWMJJGRhdDAsJGRhdDAKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwliLmd0CS5Mb29wMnhfY2JjX2RlYworCisJYWVzZAkkZGF0MCxxOAorCWFlc2QJJGRhdDEscTgKKwlhZXNpbWMJJGRhdDAsJGRhdDAKKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwkgdmVvcgkkdG1wMCwkaXZlYywkcm5kbGFzdAorCSB2ZW9yCSR0bXAxLCRpbjAsJHJuZGxhc3QKKwlhZXNkCSRkYXQwLHE5CisJYWVzZAkkZGF0MSxxOQorCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCSB2b3JyCSRpdmVjLCRpbjEsJGluMQorCSBzdWJzCSRsZW4sJGxlbiwjMzIKKwlhZXNkCSRkYXQwLHExMAorCWFlc2QJJGRhdDEscTEwCisJYWVzaW1jCSRkYXQwLCRkYXQwCisJIGNjbHIJJHN0ZXAsbG8KKwlhZXNpbWMJJGRhdDEsJGRhdDEKKwkgbW92CSRrZXlfLCRrZXkKKwlhZXNkCSRkYXQwLHExMQorCWFlc2QJJGRhdDEscTExCisJYWVzaW1jCSRkYXQwLCRkYXQwCisJIHZsZDEuOAl7JGluMH0sWyRpbnBdLCRzdGVwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJIGNjbHIJJHN0ZXAsbHMKKwlhZXNkCSRkYXQwLHExMgorCWFlc2QJJGRhdDEscTEyCisJYWVzaW1jCSRkYXQwLCRkYXQwCisJYWVzaW1jCSRkYXQxLCRkYXQxCisJIHZsZDEuOAl7JGluMX0sWyRpbnBdLCRzdGVwCisJYWVzZAkkZGF0MCxxMTMKKwlhZXNkCSRkYXQxLHExMworCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCSB2bGQxLjMyIHtxOH0sWyRrZXlfXSwjMTYJLy8gcmUtcHJlLWxvYWQgcm5ka2V5WzBdCisJYWVzZAkkZGF0MCxxMTQKKwlhZXNkCSRkYXQxLHExNAorCWFlc2ltYwkkZGF0MCwkZGF0MAorCWFlc2ltYwkkZGF0MSwkZGF0MQorCSB2bGQxLjMyIHtxOX0sWyRrZXlfXSwjMTYJLy8gcmUtcHJlLWxvYWQgcm5ka2V5WzFdCisJYWVzZAkkZGF0MCxxMTUKKwlhZXNkCSRkYXQxLHExNQorCisJIG1vdgkkY250LCRyb3VuZHMKKwl2ZW9yCSR0bXAwLCR0bXAwLCRkYXQwCisJdmVvcgkkdG1wMSwkdG1wMSwkZGF0MQorCSB2b3JyCSRkYXQwLCRpbjAsJGluMAorCXZzdDEuOAl7JHRtcDB9LFskb3V0XSwjMTYKKwkgdm9ycgkkZGF0MSwkaW4xLCRpbjEKKwl2c3QxLjgJeyR0bXAxfSxbJG91dF0sIzE2CisJYi5ocwkuTG9vcDJ4X2NiY19kZWMKKworCWFkZHMJJGxlbiwkbGVuLCMzMgorCWIuZXEJLkxjYmNfZG9uZQorCisuTGNiY19kZWNfdGFpbDoKKwlhZXNkCSRkYXQscTgKKwl2bGQxLjMyCXtxOH0sWyRrZXlfXSwjMTYKKwlhZXNpbWMJJGRhdCwkZGF0CisJc3VicwkkY250LCRjbnQsIzIKKwlhZXNkCSRkYXQscTkKKwl2bGQxLjMyCXtxOX0sWyRrZXlfXSwjMTYKKwlhZXNpbWMJJGRhdCwkZGF0CisJYi5ndAkuTGNiY19kZWNfdGFpbAorCisJYWVzZAkkZGF0LHE4CisJYWVzaW1jCSRkYXQsJGRhdAorCWFlc2QJJGRhdCxxOQorCWFlc2ltYwkkZGF0LCRkYXQKKwkgdmVvcgkkdG1wLCRpdmVjLCRybmRsYXN0CisJYWVzZAkkZGF0LHExMAorCWFlc2ltYwkkZGF0LCRkYXQKKwkgdm9ycgkkaXZlYywkaW4wLCRpbjAKKwlhZXNkCSRkYXQscTExCisJYWVzaW1jCSRkYXQsJGRhdAorCWFlc2QJJGRhdCxxMTIKKwlhZXNpbWMJJGRhdCwkZGF0CisJYWVzZAkkZGF0LHExMworCWFlc2ltYwkkZGF0LCRkYXQKKwlhZXNkCSRkYXQscTE0CisJYWVzaW1jCSRkYXQsJGRhdAorCWFlc2QJJGRhdCxxMTUKKworCXZlb3IJJHRtcCwkdG1wLCRkYXQKKwl2c3QxLjgJeyR0bXB9LFskb3V0XSwjMTYKKworLkxjYmNfZG9uZToKKwl2c3QxLjgJeyRpdmVjfSxbJGl2cF0KKy5MY2JjX2Fib3J0OgorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyICF+IC82NC8pOworCXZsZG1pYQlzcCEse2Q4LWQxNX0KKwlsZG1pYQlzcCEse3I0LXI4LHBjfQorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCWxkcgl4MjksW3NwXSwjMTYKKwlyZXQKK19fXworJGNvZGUuPTw8X19fOworLnNpemUJJHtwcmVmaXh9X2NiY19lbmNyeXB0LC4tJHtwcmVmaXh9X2NiY19lbmNyeXB0CitfX18KK319fQore3t7CitteSAoJGlucCwkb3V0LCRsZW4sJGtleSwkaXZwKT1tYXAoIngkXyIsKDAuLjQpKTsKK215ICgkcm91bmRzLCRjbnQsJGtleV8sJGN0ciwkdGN0ciwkdGN0cjEpPSgidzUiLCJ3NiIsIng3IiwidzgiLCJ3OSIsIncxMCIpOworbXkgKCRkYXQwLCRkYXQxLCRpbjAsJGluMSwkdG1wMCwkdG1wMSwkaXZlYywkcm5kbGFzdCk9bWFwKCJxJF8iLCgwLi43KSk7CisKK215ICgkZGF0LCR0bXApPSgkZGF0MCwkdG1wMCk7CisKKyMjIyBxOC1xMTUJcHJlbG9hZGVkIGtleSBzY2hlZHVsZQorCiskY29kZS49PDxfX187CisuZ2xvYmwJJHtwcmVmaXh9X2N0cjMyX2VuY3J5cHRfYmxvY2tzCisudHlwZQkke3ByZWZpeH1fY3RyMzJfZW5jcnlwdF9ibG9ja3MsJWZ1bmN0aW9uCisuYWxpZ24JNQorJHtwcmVmaXh9X2N0cjMyX2VuY3J5cHRfYmxvY2tzOgorX19fCiskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC82NC8pOworCXN0cAkJeDI5LHgzMCxbc3AsIy0xNl0hCisJYWRkCQl4Mjksc3AsIzAKK19fXworJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciAhfiAvNjQvKTsKKwltb3YJCWlwLHNwCisJc3RtZGIJCXNwISx7cjQtcjEwLGxyfQorCXZzdG1kYgkJc3AhLHtkOC1kMTV9ICAgICAgICAgICAgQCBBQkkgc3BlY2lmaWNhdGlvbiBzYXlzIHNvCisJbGRyCQlyNCwgW2lwXQkJQCBsb2FkIHJlbWFpbmluZyBhcmcKK19fXworJGNvZGUuPTw8X19fOworCWxkcgkJJHJvdW5kcyxbJGtleSwjMjQwXQorCisJbGRyCQkkY3RyLCBbJGl2cCwgIzEyXQorCXZsZDEuMzIJCXskZGF0MH0sWyRpdnBdCisKKwl2bGQxLjMyCQl7cTgtcTl9LFska2V5XQkJLy8gbG9hZCBrZXkgc2NoZWR1bGUuLi4KKwlzdWIJCSRyb3VuZHMsJHJvdW5kcywjNgorCWFkZAkJJGtleV8sJGtleSx4NSxsc2wjNAkvLyBwb2ludGVyIHRvIGxhc3QgNyByb3VuZCBrZXlzCisJc3ViCQkkcm91bmRzLCRyb3VuZHMsIzIKKwl2bGQxLjMyCQl7cTEwLXExMX0sWyRrZXlfXSwjMzIKKwl2bGQxLjMyCQl7cTEyLXExM30sWyRrZXlfXSwjMzIKKwl2bGQxLjMyCQl7cTE0LXExNX0sWyRrZXlfXSwjMzIKKwl2bGQxLjMyCQl7JHJuZGxhc3R9LFska2V5X10KKworCWFkZAkJJGtleV8sJGtleSwjMzIKKwltb3YJCSRjbnQsJHJvdW5kcworCisJc3VicwkJJGxlbiwkbGVuLCMyCisJYi5sbwkJLkxjdHIzMl90YWlsCisKKyNpZm5kZWYgX19BUk1FQl9fCisJcmV2CQkkY3RyLCAkY3RyCisjZW5kaWYKKwl2b3JyCQkkZGF0MSwkZGF0MCwkZGF0MAorCWFkZAkJJGN0ciwgJGN0ciwgIzEKKwl2b3JyCQkkaXZlYywkZGF0MCwkZGF0MAorCXJldgkJJHRjdHIxLCAkY3RyCisJY21wCQkkcm91bmRzLCMyCisJdm1vdi4zMgkJJHtkYXQxfVszXSwkdGN0cjEKKwliLmVxCQkuTGN0cjMyXzEyOAorCisuTG9vcDJ4X2N0cjMyOgorCWFlc2UJCSRkYXQwLHE4CisJYWVzZQkJJGRhdDEscTgKKwl2bGQxLjMyCQl7cTh9LFska2V5X10sIzE2CisJYWVzbWMJCSRkYXQwLCRkYXQwCisJYWVzbWMJCSRkYXQxLCRkYXQxCisJc3VicwkJJGNudCwkY250LCMyCisJYWVzZQkJJGRhdDAscTkKKwlhZXNlCQkkZGF0MSxxOQorCXZsZDEuMzIJCXtxOX0sWyRrZXlfXSwjMTYKKwlhZXNtYwkJJGRhdDAsJGRhdDAKKwlhZXNtYwkJJGRhdDEsJGRhdDEKKwliLmd0CQkuTG9vcDJ4X2N0cjMyCisKKwlhZXNlCQkkZGF0MCxxOAorCWFlc2UJCSRkYXQxLHE4CisJYWVzbWMJCSR0bXAwLCRkYXQwCisJIHZvcnIJCSRkYXQwLCRpdmVjLCRpdmVjCisJYWVzbWMJCSR0bXAxLCRkYXQxCisJIHZvcnIJCSRkYXQxLCRpdmVjLCRpdmVjCisJYWVzZQkJJHRtcDAscTkKKwlhZXNlCQkkdG1wMSxxOQorCSB2bGQxLjgJCXskaW4wfSxbJGlucF0sIzE2CisJYWVzbWMJCSR0bXAwLCR0bXAwCisJIHZsZDEuOAkJeyRpbjF9LFskaW5wXSwjMTYKKwlhZXNtYwkJJHRtcDEsJHRtcDEKKwkgYWRkCQkkY3RyLCRjdHIsIzEKKwlhZXNlCQkkdG1wMCxxMTAKKwlhZXNlCQkkdG1wMSxxMTAKKwkgcmV2CQkkdGN0ciwkY3RyCisJYWVzbWMJCSR0bXAwLCR0bXAwCisJYWVzbWMJCSR0bXAxLCR0bXAxCisJIGFkZAkJJGN0ciwkY3RyLCMxCisJYWVzZQkJJHRtcDAscTExCisJYWVzZQkJJHRtcDEscTExCisJIHZlb3IJCSRpbjAsJGluMCwkcm5kbGFzdAorCSByZXYJCSR0Y3RyMSwkY3RyCisJYWVzbWMJCSR0bXAwLCR0bXAwCisJYWVzbWMJCSR0bXAxLCR0bXAxCisJIHZlb3IJCSRpbjEsJGluMSwkcm5kbGFzdAorCSBtb3YJCSRrZXlfLCRrZXkKKwlhZXNlCQkkdG1wMCxxMTIKKwlhZXNlCQkkdG1wMSxxMTIKKwkgc3VicwkJJGxlbiwkbGVuLCMyCisJYWVzbWMJCSR0bXAwLCR0bXAwCisJYWVzbWMJCSR0bXAxLCR0bXAxCisJIHZsZDEuMzIJIHtxOC1xOX0sWyRrZXlfXSwjMzIJLy8gcmUtcHJlLWxvYWQgcm5ka2V5WzAtMV0KKwlhZXNlCQkkdG1wMCxxMTMKKwlhZXNlCQkkdG1wMSxxMTMKKwlhZXNtYwkJJHRtcDAsJHRtcDAKKwlhZXNtYwkJJHRtcDEsJHRtcDEKKwlhZXNlCQkkdG1wMCxxMTQKKwlhZXNlCQkkdG1wMSxxMTQKKwkgdm1vdi4zMgkke2RhdDB9WzNdLCAkdGN0cgorCWFlc21jCQkkdG1wMCwkdG1wMAorCSB2bW92LjMyCSR7ZGF0MX1bM10sICR0Y3RyMQorCWFlc21jCQkkdG1wMSwkdG1wMQorCWFlc2UJCSR0bXAwLHExNQorCWFlc2UJCSR0bXAxLHExNQorCisJIG1vdgkJJGNudCwkcm91bmRzCisJdmVvcgkJJGluMCwkaW4wLCR0bXAwCisJdmVvcgkJJGluMSwkaW4xLCR0bXAxCisJdnN0MS44CQl7JGluMH0sWyRvdXRdLCMxNgorCXZzdDEuOAkJeyRpbjF9LFskb3V0XSwjMTYKKwliLmhzCQkuTG9vcDJ4X2N0cjMyCisKKwlhZGRzCQkkbGVuLCRsZW4sIzIKKwliLmVxCQkuTGN0cjMyX2RvbmUKKwliCQkuTGN0cjMyX3RhaWwKKworLkxjdHIzMl8xMjg6CisJdmxkMS4zMgkJeyR0bXAwLSR0bXAxfSxbJGtleV9dCisKKy5Mb29wMnhfY3RyMzJfMTI4OgorCWFlc2UJCSRkYXQwLHE4CisJYWVzZQkJJGRhdDEscTgKKwlhZXNtYwkJJGRhdDAsJGRhdDAKKwkgdmxkMS44CQl7JGluMH0sWyRpbnBdLCMxNgorCWFlc21jCQkkZGF0MSwkZGF0MQorCSB2bGQxLjgJCXskaW4xfSxbJGlucF0sIzE2CisJYWVzZQkJJGRhdDAscTkKKwlhZXNlCQkkZGF0MSxxOQorCSBhZGQJCSRjdHIsJGN0ciwjMQorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCSByZXYJCSR0Y3RyLCRjdHIKKwlhZXNlCQkkZGF0MCwkdG1wMAorCWFlc2UJCSRkYXQxLCR0bXAwCisJIGFkZAkJJGN0ciwkY3RyLCMxCisJYWVzbWMJCSRkYXQwLCRkYXQwCisJYWVzbWMJCSRkYXQxLCRkYXQxCisJIHJldgkJJHRjdHIxLCRjdHIKKwlhZXNlCQkkZGF0MCwkdG1wMQorCWFlc2UJCSRkYXQxLCR0bXAxCisJIHN1YnMJCSRsZW4sJGxlbiwjMgorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCWFlc2UJCSRkYXQwLHExMAorCWFlc2UJCSRkYXQxLHExMAorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCWFlc2UJCSRkYXQwLHExMQorCWFlc2UJCSRkYXQxLHExMQorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCWFlc2UJCSRkYXQwLHExMgorCWFlc2UJCSRkYXQxLHExMgorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCWFlc2UJCSRkYXQwLHExMworCWFlc2UJCSRkYXQxLHExMworCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCWFlc2UJCSRkYXQwLHExNAorCWFlc2UJCSRkYXQxLHExNAorCWFlc21jCQkkZGF0MCwkZGF0MAorCWFlc21jCQkkZGF0MSwkZGF0MQorCSB2ZW9yCQkkaW4wLCRpbjAsJHJuZGxhc3QKKwlhZXNlCQkkZGF0MCxxMTUKKwkgdmVvcgkJJGluMSwkaW4xLCRybmRsYXN0CisJYWVzZQkJJGRhdDEscTE1CisKKwl2ZW9yCQkkaW4wLCRpbjAsJGRhdDAKKwl2b3JyCQkkZGF0MCwkaXZlYywkaXZlYworCXZlb3IJCSRpbjEsJGluMSwkZGF0MQorCXZvcnIJCSRkYXQxLCRpdmVjLCRpdmVjCisJdnN0MS44CQl7JGluMH0sWyRvdXRdLCMxNgorCXZtb3YuMzIJCSR7ZGF0MH1bM10sICR0Y3RyCisJdnN0MS44CQl7JGluMX0sWyRvdXRdLCMxNgorCXZtb3YuMzIJCSR7ZGF0MX1bM10sICR0Y3RyMQorCWIuaHMJCS5Mb29wMnhfY3RyMzJfMTI4CisKKwlhZGRzCQkkbGVuLCRsZW4sIzIKKwliLmVxCQkuTGN0cjMyX2RvbmUKKworLkxjdHIzMl90YWlsOgorCWFlc2UJCSRkYXQscTgKKwl2bGQxLjMyCQl7cTh9LFska2V5X10sIzE2CisJYWVzbWMJCSRkYXQsJGRhdAorCXN1YnMJCSRjbnQsJGNudCwjMgorCWFlc2UJCSRkYXQscTkKKwl2bGQxLjMyCQl7cTl9LFska2V5X10sIzE2CisJYWVzbWMJCSRkYXQsJGRhdAorCWIuZ3QJCS5MY3RyMzJfdGFpbAorCisJYWVzZQkJJGRhdCxxOAorCWFlc21jCQkkZGF0LCRkYXQKKwlhZXNlCQkkZGF0LHE5CisJYWVzbWMJCSRkYXQsJGRhdAorCSB2bGQxLjgJCXskaW4wfSxbJGlucF0KKwlhZXNlCQkkZGF0LHExMAorCWFlc21jCQkkZGF0LCRkYXQKKwlhZXNlCQkkZGF0LHExMQorCWFlc21jCQkkZGF0LCRkYXQKKwlhZXNlCQkkZGF0LHExMgorCWFlc21jCQkkZGF0LCRkYXQKKwlhZXNlCQkkZGF0LHExMworCWFlc21jCQkkZGF0LCRkYXQKKwlhZXNlCQkkZGF0LHExNAorCWFlc21jCQkkZGF0LCRkYXQKKwkgdmVvcgkJJGluMCwkaW4wLCRybmRsYXN0CisJYWVzZQkJJGRhdCxxMTUKKworCXZlb3IJCSRpbjAsJGluMCwkZGF0CisJdnN0MS44CQl7JGluMH0sWyRvdXRdCisKKy5MY3RyMzJfZG9uZToKK19fXworJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciAhfiAvNjQvKTsKKwl2bGRtaWEJCXNwISx7ZDgtZDE1fQorCWxkbWlhCQlzcCEse3I0LXIxMCxwY30KK19fXworJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciA9fiAvNjQvKTsKKwlsZHIJCXgyOSxbc3BdLCMxNgorCXJldAorX19fCiskY29kZS49PDxfX187Cisuc2l6ZQkke3ByZWZpeH1fY3RyMzJfZW5jcnlwdF9ibG9ja3MsLi0ke3ByZWZpeH1fY3RyMzJfZW5jcnlwdF9ibG9ja3MKK19fXworfX19CiskY29kZS49PDxfX187CisjZW5kaWYKK19fXworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWYgKCRmbGF2b3VyID1+IC82NC8pIHsJCQkjIyMjIyMjIyA2NC1iaXQgY29kZQorICAgIG15ICVvcGNvZGUgPSAoCisJImFlc2QiCT0+CTB4NGUyODU4MDAsCSJhZXNlIgk9PgkweDRlMjg0ODAwLAorCSJhZXNpbWMiPT4JMHg0ZTI4NzgwMCwJImFlc21jIgk9PgkweDRlMjg2ODAwCSk7CisKKyAgICBsb2NhbCAqdW5hZXMgPSBzdWIgeworCW15ICgkbW5lbW9uaWMsJGFyZyk9QF87CisKKwkkYXJnID1+IG0vW3F2XShbMC05XSspW14sXSosXHMqW3F2XShbMC05XSspL28JJiYKKwlzcHJpbnRmICIuaW5zdFx0MHglMDh4XHQvLyVzICVzIiwKKwkJCSRvcGNvZGV7JG1uZW1vbmljfXwkMXwoJDI8PDUpLAorCQkJJG1uZW1vbmljLCRhcmc7CisgICAgfTsKKworICAgIGZvcmVhY2goc3BsaXQoIlxuIiwkY29kZSkpIHsKKyAgICAgICAgcy9cYChbXlxgXSopXGAvZXZhbCgkMSkvZ2VvOworCisJcy9cYnEoWzAtOV0rKVxiLyJ2Ii4oJDE8OD8kMTokMSs4KS4iLjE2YiIvZ2VvOwkjIG9sZC0+bmV3IHJlZ2lzdGVycworICAgICAgICBzL0Bccy9cL1wvL287CQkJIyBvbGQtPm5ldyBzdHlsZSBjb21tZW50YXJ5CisKKwkjcy9bdl0/KGFlc1x3KylccysoW3F2XS4qKS91bmFlcygkMSwkMikvZ2VvCW9yCisJcy9jY2xyXHMrKFt3eF0pKFteLF0rKSxccyooW2Etel0rKS9jc2VsCSQxJDIsJDF6ciwkMSQyLCQzL28Jb3IKKyAgICAgICAgcy92bW92XC5pOC9tb3ZpL28Jb3IJIyBmaXggdXAgbGVnYWN5IG1uZW1vbmljcworICAgICAgICBzL3ZleHRcLjgvZXh0L28JCW9yCisgICAgICAgIHMvdnJldjMyXC44L3JldjMyL28Jb3IKKyAgICAgICAgcy92dHN0XC44L2NtdHN0L28Jb3IKKyAgICAgICAgcy92c2hyL3VzaHIvbwkJb3IKKyAgICAgICAgcy9eKFxzKyl2LyQxL28JCW9yCSMgc3RyaXAgb2ZmIHYgcHJlZml4CisJcy9cYmJ4XHMrbHJcYi9yZXQvbzsKKworCSMgZml4IHVwIHJlbWFpbmlnIGxlZ2FjeSBzdWZmaXhlcworCXMvXC5bdWldPzgvL287CisJbS9cXSwjOC9vIGFuZCBzL1wuMTZiL1wuOGIvZ287CisgICAgICAgIHMvXC5bdWldPzMyLy9vIGFuZCBzL1wuMTZiL1wuNHMvZ287CisgICAgICAgIHMvXC5bdWldPzY0Ly9vIGFuZCBzL1wuMTZiL1wuMmQvZ287CisJcy9cLls0Ml0oW3NkXSlcWyhbMC0zXSlcXS9cLiQxXFskMlxdL287CisKKyAgICAgICAgcHJpbnQgJF8sIlxuIjsKKyAgICB9Cit9IGVsc2UgewkJCQkjIyMjIyMjIyAzMi1iaXQgY29kZQorICAgIG15ICVvcGNvZGUgPSAoCisJImFlc2QiCT0+CTB4ZjNiMDAzNDAsCSJhZXNlIgk9PgkweGYzYjAwMzAwLAorCSJhZXNpbWMiPT4JMHhmM2IwMDNjMCwJImFlc21jIgk9PgkweGYzYjAwMzgwCSk7CisKKyAgICBsb2NhbCAqdW5hZXMgPSBzdWIgeworCW15ICgkbW5lbW9uaWMsJGFyZyk9QF87CisKKwlpZiAoJGFyZyA9fiBtL1txdl0oWzAtOV0rKVteLF0qLFxzKltxdl0oWzAtOV0rKS9vKSB7CisJICAgIG15ICR3b3JkID0gJG9wY29kZXskbW5lbW9uaWN9fCgoJDEmNyk8PDEzKXwoKCQxJjgpPDwxOSkKKwkJCQkJIHwoKCQyJjcpPDwxKSB8KCgkMiY4KTw8Mik7CisJICAgICMgc2luY2UgQVJNdjcgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgZW5jb2RlZCBsaXR0bGUtZW5kaWFuLgorCSAgICAjIGNvcnJlY3Qgc29sdXRpb24gaXMgdG8gdXNlIC5pbnN0IGRpcmVjdGl2ZSwgYnV0IG9sZGVyCisJICAgICMgYXNzZW1ibGVycyBkb24ndCBpbXBsZW1lbnQgaXQ6LSgKKwkgICAgc3ByaW50ZiAiLmJ5dGVcdDB4JTAyeCwweCUwMngsMHglMDJ4LDB4JTAyeFx0QCAlcyAlcyIsCisJCQkkd29yZCYweGZmLCgkd29yZD4+OCkmMHhmZiwKKwkJCSgkd29yZD4+MTYpJjB4ZmYsKCR3b3JkPj4yNCkmMHhmZiwKKwkJCSRtbmVtb25pYywkYXJnOworCX0KKyAgICB9OworCisgICAgc3ViIHVudnRibCB7CisJbXkgJGFyZz1zaGlmdDsKKworCSRhcmcgPX4gbS9xKFswLTldKyksXHMqXHtxKFswLTldKylcfSxccypxKFswLTldKykvbyAmJgorCXNwcmludGYJInZ0YmwuOAlkJWQse3ElZH0sZCVkXG5cdCIuCisJCSJ2dGJsLjgJZCVkLHtxJWR9LGQlZCIsIDIqJDEsJDIsMiokMywgMiokMSsxLCQyLDIqJDMrMTsJCisgICAgfQorCisgICAgc3ViIHVudmR1cDMyIHsKKwlteSAkYXJnPXNoaWZ0OworCisJJGFyZyA9fiBtL3EoWzAtOV0rKSxccypxKFswLTldKylcWyhbMC0zXSlcXS9vICYmCisJc3ByaW50ZgkidmR1cC4zMglxJWQsZCVkWyVkXSIsJDEsMiokMisoJDM+PjEpLCQzJjE7CQorICAgIH0KKworICAgIHN1YiB1bnZtb3YzMiB7CisJbXkgJGFyZz1zaGlmdDsKKworCSRhcmcgPX4gbS9xKFswLTldKylcWyhbMC0zXSlcXSwoLiopL28gJiYKKwlzcHJpbnRmCSJ2bW92LjMyCWQlZFslZF0sJXMiLDIqJDErKCQyPj4xKSwkMiYxLCQzOwkKKyAgICB9CisKKyAgICBmb3JlYWNoKHNwbGl0KCJcbiIsJGNvZGUpKSB7CisgICAgICAgIHMvXGAoW15cYF0qKVxgL2V2YWwoJDEpL2dlbzsKKworCXMvXGJbd3hdKFswLTldKylcYi9yJDEvZ287CQkjIG5ldy0+b2xkIHJlZ2lzdGVycworCXMvXGJ2KFswLTldKVwuWzEyNDY4XStbYnNkXVxiL3EkMS9nbzsJIyBuZXctPm9sZCByZWdpc3RlcnMKKyAgICAgICAgcy9cL1wvXHM/L0AgL287CQkJCSMgbmV3LT5vbGQgc3R5bGUgY29tbWVudGFyeQorCisJIyBmaXggdXAgcmVtYWluaWcgbmV3LXN0eWxlIHN1ZmZpeGVzCisJcy9ce3EoWzAtOV0rKVx9LFxzKlxbKC4rKVxdLCM4L3NwcmludGYgIntkJWR9LFskMl0hIiwyKiQxL2VvCW9yCisJcy9cXSwjWzAtOV0rL10hL287CisKKwlzL1t2XT8oYWVzXHcrKVxzKyhbcXZdLiopL3VuYWVzKCQxLCQyKS9nZW8Jb3IKKwlzL2NjbHJccysoW14sXSspLFxzKihbYS16XSspL21vdiQyCSQxLCMwL28Jb3IKKwlzL3Z0YmxcLjhccysoLiopL3VudnRibCgkMSkvZ2VvCQkJb3IKKwlzL3ZkdXBcLjMyXHMrKC4qKS91bnZkdXAzMigkMSkvZ2VvCQlvcgorCXMvdm1vdlwuMzJccysoLiopL3Vudm1vdjMyKCQxKS9nZW8JCW9yCisJcy9eKFxzKyliXC4vJDFiL28JCQkJb3IKKwlzL14oXHMrKXJldC8kMWJ4XHRsci9vOworCisgICAgICAgIHByaW50ICRfLCJcbiI7CisgICAgfQorfQorCitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2FzbS9ic2Flcy1hcm12Ny5wbCBiL2NyeXB0by9hZXMvYXNtL2JzYWVzLWFybXY3LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZDk2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYWVzL2FzbS9ic2Flcy1hcm12Ny5wbApAQCAtMCwwICsxLDI0NjcgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMKKyMgU3BlY2lmaWMgbW9kZXMgYW5kIGFkYXB0YXRpb24gZm9yIExpbnV4IGtlcm5lbCBieSBBcmQgQmllc2hldXZlbAorIyA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4uIFBlcm1pc3Npb24gdG8gdXNlIHVuZGVyIEdQTCB0ZXJtcyBpcworIyBncmFudGVkLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIEJpdC1zbGljZWQgQUVTIGZvciBBUk0gTkVPTgorIworIyBGZWJydWFyeSAyMDEyLgorIworIyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGRpcmVjdCBhZGFwdGF0aW9uIG9mIGJzYWVzLXg4Nl82NCBtb2R1bGUgZm9yCisjIEFSTSBORU9OLiBFeGNlcHQgdGhhdCB0aGlzIG1vZHVsZSBpcyBlbmRpYW4tbmV1dHJhbCBbaW4gc2Vuc2UgdGhhdAorIyBpdCBjYW4gYmUgY29tcGlsZWQgZm9yIGVpdGhlciBlbmRpYW5uZXNzXSBieSBjb3VydGVzeSBvZiB2bGQxLjgncworIyBuZXV0cmFsaXR5LiBJbml0aWFsIHZlcnNpb24gZG9lc24ndCBpbXBsZW1lbnQgaW50ZXJmYWNlIHRvIE9wZW5TU0wsCisjIG9ubHkgbG93LWxldmVsIHByaW1pdGl2ZXMgYW5kIHVuc3VwcG9ydGVkIGVudHJ5IHBvaW50cywganVzdCBlbm91Z2gKKyMgdG8gY29sbGVjdCBwZXJmb3JtYW5jZSByZXN1bHRzLCB3aGljaCBmb3IgQ29ydGV4LUE4IGNvcmUgYXJlOgorIworIyBlbmNyeXB0CTE5LjUgY3ljbGVzIHBlciBieXRlIHByb2Nlc3NlZCB3aXRoIDEyOC1iaXQga2V5CisjIGRlY3J5cHQJMjIuMSBjeWNsZXMgcGVyIGJ5dGUgcHJvY2Vzc2VkIHdpdGggMTI4LWJpdCBrZXkKKyMga2V5IGNvbnYuCTQ0MCAgY3ljbGVzIHBlciAxMjgtYml0IGtleS8wLjE4IG9mIDh4IGJsb2NrCisjCisjIFNuYXBkcmFnb24gUzQgZW5jcnlwdHMgYnl0ZSBpbiAxNy42IGN5Y2xlcyBhbmQgZGVjcnlwdHMgaW4gMTkuNywKKyMgd2hpY2ggaXMgW211Y2hdIHdvcnNlIHRoYW4gYW50aWNpcGF0ZWQgKGZvciBmdXJ0aGVyIGRldGFpbHMgc2VlCisjIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL1NuYXBkcmFnb24tUzQuaHRtbCkuCisjCisjIENvcnRleC1BMTUgbWFuYWdlcyBpbiAxNC4yLzE2LjEgY3ljbGVzIFt3aGVuIGludGVnZXItb25seSBjb2RlCisjIG1hbmFnZXMgaW4gMjAuMCBjeWNsZXNdLgorIworIyBXaGVuIGNvbXBhcmluZyB0byB4ODZfNjQgcmVzdWx0cyBrZWVwIGluIG1pbmQgdGhhdCBORU9OIHVuaXQgaXMKKyMgW21vc3RseV0gc2luZ2xlLWlzc3VlIGFuZCB0aHVzIGNhbid0IFtmdWxseV0gYmVuZWZpdCBmcm9tCisjIGluc3RydWN0aW9uLWxldmVsIHBhcmFsbGVsaXNtLiBBbmQgd2hlbiBjb21wYXJpbmcgdG8gYWVzLWFybXY0CisjIHJlc3VsdHMga2VlcCBpbiBtaW5kIGtleSBzY2hlZHVsZSBjb252ZXJzaW9uIG92ZXJoZWFkIChzZWUKKyMgYnNhZXMteDg2XzY0LnBsIGZvciBmdXJ0aGVyIGRldGFpbHMpLi4uCisjCisjCQkJCQkJPGFwcHJvQG9wZW5zc2wub3JnPgorCisjIEFwcmlsLUF1Z3VzdCAyMDEzCisjCisjIEFkZCBDQkMsIENUUiBhbmQgWFRTIHN1YnJvdXRpbmVzLCBhZGFwdCBmb3Iga2VybmVsIHVzZS4KKyMKKyMJCQkJCTxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPgorCit3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQorb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKworbXkgKCRpbnAsJG91dCwkbGVuLCRrZXkpPSgicjAiLCJyMSIsInIyIiwicjMiKTsKK215IEBYTU09bWFwKCJxJF8iLCgwLi4xNSkpOworCit7CitteSAoJGtleSwkcm91bmRzLCRjb25zdCk9KCJyNCIsInI1IiwicjYiKTsKKworc3ViIERsbygpICAgeyBzaGlmdD1+bXxxKFsxXT9bMC05XSl8PyJkIi4oJDEqMik6IiI7ICAgICB9CitzdWIgRGhpKCkgICB7IHNoaWZ0PX5tfHEoWzFdP1swLTldKXw/ImQiLigkMSoyKzEpOiIiOyAgIH0KKworc3ViIFNib3ggeworIyBpbnB1dCBpbiAgbHNiID4gW2IwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiN10gPCBtc2IKKyMgb3V0cHV0IGluIGxzYiA+IFtiMCwgYjEsIGI0LCBiNiwgYjMsIGI3LCBiMiwgYjVdIDwgbXNiCitteSBAYj1AX1swLi43XTsKK215IEB0PUBfWzguLjExXTsKK215IEBzPUBfWzEyLi4xNV07CisJJkluQmFzaXNDaGFuZ2UJKEBiKTsKKwkmSW52X0dGMjU2CShAYls2LDUsMCwzLDcsMSw0LDJdLEB0LEBzKTsKKwkmT3V0QmFzaXNDaGFuZ2UJKEBiWzcsMSw0LDIsNiw1LDAsM10pOworfQorCitzdWIgSW5CYXNpc0NoYW5nZSB7CisjIGlucHV0IGluICBsc2IgPiBbYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3XSA8IG1zYgorIyBvdXRwdXQgaW4gbHNiID4gW2I2LCBiNSwgYjAsIGIzLCBiNywgYjEsIGI0LCBiMl0gPCBtc2IgCitteSBAYj1AX1swLi43XTsKKyRjb2RlLj08PF9fXzsKKwl2ZW9yCUBiWzJdLCBAYlsyXSwgQGJbMV0KKwl2ZW9yCUBiWzVdLCBAYls1XSwgQGJbNl0KKwl2ZW9yCUBiWzNdLCBAYlszXSwgQGJbMF0KKwl2ZW9yCUBiWzZdLCBAYls2XSwgQGJbMl0KKwl2ZW9yCUBiWzVdLCBAYls1XSwgQGJbMF0KKworCXZlb3IJQGJbNl0sIEBiWzZdLCBAYlszXQorCXZlb3IJQGJbM10sIEBiWzNdLCBAYls3XQorCXZlb3IJQGJbN10sIEBiWzddLCBAYls1XQorCXZlb3IJQGJbM10sIEBiWzNdLCBAYls0XQorCXZlb3IJQGJbNF0sIEBiWzRdLCBAYls1XQorCisJdmVvcglAYlsyXSwgQGJbMl0sIEBiWzddCisJdmVvcglAYlszXSwgQGJbM10sIEBiWzFdCisJdmVvcglAYlsxXSwgQGJbMV0sIEBiWzVdCitfX18KK30KKworc3ViIE91dEJhc2lzQ2hhbmdlIHsKKyMgaW5wdXQgaW4gIGxzYiA+IFtiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjddIDwgbXNiCisjIG91dHB1dCBpbiBsc2IgPiBbYjYsIGIxLCBiMiwgYjQsIGI3LCBiMCwgYjMsIGI1XSA8IG1zYgorbXkgQGI9QF9bMC4uN107CiskY29kZS49PDxfX187CisJdmVvcglAYlswXSwgQGJbMF0sIEBiWzZdCisJdmVvcglAYlsxXSwgQGJbMV0sIEBiWzRdCisJdmVvcglAYls0XSwgQGJbNF0sIEBiWzZdCisJdmVvcglAYlsyXSwgQGJbMl0sIEBiWzBdCisJdmVvcglAYls2XSwgQGJbNl0sIEBiWzFdCisKKwl2ZW9yCUBiWzFdLCBAYlsxXSwgQGJbNV0KKwl2ZW9yCUBiWzVdLCBAYls1XSwgQGJbM10KKwl2ZW9yCUBiWzNdLCBAYlszXSwgQGJbN10KKwl2ZW9yCUBiWzddLCBAYls3XSwgQGJbNV0KKwl2ZW9yCUBiWzJdLCBAYlsyXSwgQGJbNV0KKworCXZlb3IJQGJbNF0sIEBiWzRdLCBAYls3XQorX19fCit9CisKK3N1YiBJbnZTYm94IHsKKyMgaW5wdXQgaW4gbHNiIAk+IFtiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjddIDwgbXNiCisjIG91dHB1dCBpbiBsc2IJPiBbYjAsIGIxLCBiNiwgYjQsIGIyLCBiNywgYjMsIGI1XSA8IG1zYgorbXkgQGI9QF9bMC4uN107CitteSBAdD1AX1s4Li4xMV07CitteSBAcz1AX1sxMi4uMTVdOworCSZJbnZJbkJhc2lzQ2hhbmdlCShAYik7CisJJkludl9HRjI1NgkJKEBiWzUsMSwyLDYsMyw3LDAsNF0sQHQsQHMpOworCSZJbnZPdXRCYXNpc0NoYW5nZQkoQGJbMyw3LDAsNCw1LDEsMiw2XSk7Cit9CisKK3N1YiBJbnZJbkJhc2lzQ2hhbmdlIHsJCSMgT3V0QmFzaXNDaGFuZ2UgaW4gcmV2ZXJzZSAod2l0aCB0d2lzdCkKK215IEBiPUBfWzUsMSwyLDYsMyw3LDAsNF07CiskY29kZS49PDxfX18KKwkgdmVvcglAYlsxXSwgQGJbMV0sIEBiWzddCisJdmVvcglAYls0XSwgQGJbNF0sIEBiWzddCisKKwl2ZW9yCUBiWzddLCBAYls3XSwgQGJbNV0KKwkgdmVvcglAYlsxXSwgQGJbMV0sIEBiWzNdCisJdmVvcglAYlsyXSwgQGJbMl0sIEBiWzVdCisJdmVvcglAYlszXSwgQGJbM10sIEBiWzddCisKKwl2ZW9yCUBiWzZdLCBAYls2XSwgQGJbMV0KKwl2ZW9yCUBiWzJdLCBAYlsyXSwgQGJbMF0KKwkgdmVvcglAYls1XSwgQGJbNV0sIEBiWzNdCisJdmVvcglAYls0XSwgQGJbNF0sIEBiWzZdCisJdmVvcglAYlswXSwgQGJbMF0sIEBiWzZdCisJdmVvcglAYlsxXSwgQGJbMV0sIEBiWzRdCitfX18KK30KKworc3ViIEludk91dEJhc2lzQ2hhbmdlIHsJCSMgSW5CYXNpc0NoYW5nZSBpbiByZXZlcnNlCitteSBAYj1AX1syLDUsNywzLDYsMSwwLDRdOworJGNvZGUuPTw8X19fOworCXZlb3IJQGJbMV0sIEBiWzFdLCBAYls1XQorCXZlb3IJQGJbMl0sIEBiWzJdLCBAYls3XQorCisJdmVvcglAYlszXSwgQGJbM10sIEBiWzFdCisJdmVvcglAYls0XSwgQGJbNF0sIEBiWzVdCisJdmVvcglAYls3XSwgQGJbN10sIEBiWzVdCisJdmVvcglAYlszXSwgQGJbM10sIEBiWzRdCisJIHZlb3IgCUBiWzVdLCBAYls1XSwgQGJbMF0KKwl2ZW9yCUBiWzNdLCBAYlszXSwgQGJbN10KKwkgdmVvcglAYls2XSwgQGJbNl0sIEBiWzJdCisJIHZlb3IJQGJbMl0sIEBiWzJdLCBAYlsxXQorCXZlb3IJQGJbNl0sIEBiWzZdLCBAYlszXQorCisJdmVvcglAYlszXSwgQGJbM10sIEBiWzBdCisJdmVvcglAYls1XSwgQGJbNV0sIEBiWzZdCitfX18KK30KKworc3ViIE11bF9HRjQgeworIzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjOyogTXVsX0dGNDogSW5wdXQgeDAteDEseTAteTEgT3V0cHV0IHgwLXgxIFRlbXAgdDAgKDgpICoKKyM7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorbXkgKCR4MCwkeDEsJHkwLCR5MSwkdDAsJHQxKT1AXzsKKyRjb2RlLj08PF9fXzsKKwl2ZW9yIAkkdDAsICR5MCwgJHkxCisJdmFuZAkkdDAsICR0MCwgJHgwCisJdmVvcgkkeDAsICR4MCwgJHgxCisJdmFuZAkkdDEsICR4MSwgJHkwCisJdmFuZAkkeDAsICR4MCwgJHkxCisJdmVvcgkkeDEsICR0MSwgJHQwCisJdmVvcgkkeDAsICR4MCwgJHQxCitfX18KK30KKworc3ViIE11bF9HRjRfTiB7CQkJCSMgbm90IHVzZWQsIHNlZSBuZXh0IHN1YnJvdXRpbmUKKyMgbXVsdGlwbHkgYW5kIHNjYWxlIGJ5IE4KK215ICgkeDAsJHgxLCR5MCwkeTEsJHQwKT1AXzsKKyRjb2RlLj08PF9fXzsKKwl2ZW9yCSR0MCwgJHkwLCAkeTEKKwl2YW5kCSR0MCwgJHQwLCAkeDAKKwl2ZW9yCSR4MCwgJHgwLCAkeDEKKwl2YW5kCSR4MSwgJHgxLCAkeTAKKwl2YW5kCSR4MCwgJHgwLCAkeTEKKwl2ZW9yCSR4MSwgJHgxLCAkeDAKKwl2ZW9yCSR4MCwgJHgwLCAkdDAKK19fXworfQorCitzdWIgTXVsX0dGNF9OX0dGNCB7CisjIGludGVybGVhdmVkIE11bF9HRjRfTiBhbmQgTXVsX0dGNAorbXkgKCR4MCwkeDEsJHkwLCR5MSwkdDAsCisgICAgJHgyLCR4MywkeTIsJHkzLCR0MSk9QF87CiskY29kZS49PDxfX187CisJdmVvcgkkdDAsICR5MCwgJHkxCisJIHZlb3IgCSR0MSwgJHkyLCAkeTMKKwl2YW5kCSR0MCwgJHQwLCAkeDAKKwkgdmFuZAkkdDEsICR0MSwgJHgyCisJdmVvcgkkeDAsICR4MCwgJHgxCisJIHZlb3IJJHgyLCAkeDIsICR4MworCXZhbmQJJHgxLCAkeDEsICR5MAorCSB2YW5kCSR4MywgJHgzLCAkeTIKKwl2YW5kCSR4MCwgJHgwLCAkeTEKKwkgdmFuZAkkeDIsICR4MiwgJHkzCisJdmVvcgkkeDEsICR4MSwgJHgwCisJIHZlb3IJJHgyLCAkeDIsICR4MworCXZlb3IJJHgwLCAkeDAsICR0MAorCSB2ZW9yCSR4MywgJHgzLCAkdDEKK19fXworfQorc3ViIE11bF9HRjE2XzIgeworbXkgQHg9QF9bMC4uN107CitteSBAeT1AX1s4Li4xMV07CitteSBAdD1AX1sxMi4uMTVdOworJGNvZGUuPTw8X19fOworCXZlb3IJQHRbMF0sIEB4WzBdLCBAeFsyXQorCXZlb3IJQHRbMV0sIEB4WzFdLCBAeFszXQorX19fCisJJk11bF9HRjQgIAkoQHhbMF0sIEB4WzFdLCBAeVswXSwgQHlbMV0sIEB0WzIuLjNdKTsKKyRjb2RlLj08PF9fXzsKKwl2ZW9yCUB5WzBdLCBAeVswXSwgQHlbMl0KKwl2ZW9yCUB5WzFdLCBAeVsxXSwgQHlbM10KK19fXworCU11bF9HRjRfTl9HRjQJKEB0WzBdLCBAdFsxXSwgQHlbMF0sIEB5WzFdLCBAdFszXSwKKwkJCSBAeFsyXSwgQHhbM10sIEB5WzJdLCBAeVszXSwgQHRbMl0pOworJGNvZGUuPTw8X19fOworCXZlb3IJQHhbMF0sIEB4WzBdLCBAdFswXQorCXZlb3IJQHhbMl0sIEB4WzJdLCBAdFswXQorCXZlb3IJQHhbMV0sIEB4WzFdLCBAdFsxXQorCXZlb3IJQHhbM10sIEB4WzNdLCBAdFsxXQorCisJdmVvcglAdFswXSwgQHhbNF0sIEB4WzZdCisJdmVvcglAdFsxXSwgQHhbNV0sIEB4WzddCitfX18KKwkmTXVsX0dGNF9OX0dGNAkoQHRbMF0sIEB0WzFdLCBAeVswXSwgQHlbMV0sIEB0WzNdLAorCQkJIEB4WzZdLCBAeFs3XSwgQHlbMl0sIEB5WzNdLCBAdFsyXSk7CiskY29kZS49PDxfX187CisJdmVvcglAeVswXSwgQHlbMF0sIEB5WzJdCisJdmVvcglAeVsxXSwgQHlbMV0sIEB5WzNdCitfX18KKwkmTXVsX0dGNCAgCShAeFs0XSwgQHhbNV0sIEB5WzBdLCBAeVsxXSwgQHRbMi4uM10pOworJGNvZGUuPTw8X19fOworCXZlb3IJQHhbNF0sIEB4WzRdLCBAdFswXQorCXZlb3IJQHhbNl0sIEB4WzZdLCBAdFswXQorCXZlb3IJQHhbNV0sIEB4WzVdLCBAdFsxXQorCXZlb3IJQHhbN10sIEB4WzddLCBAdFsxXQorX19fCit9CitzdWIgSW52X0dGMjU2IHsKKyM7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyM7KiBJbnZfR0YyNTY6IElucHV0IHgwLXg3IE91dHB1dCB4MC14NyBUZW1wIHQwLXQzLHMwLXMzICgxNDQpICAgICAgICoKKyM7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK215IEB4PUBfWzAuLjddOworbXkgQHQ9QF9bOC4uMTFdOworbXkgQHM9QF9bMTIuLjE1XTsKKyMgZGlyZWN0IG9wdGltaXphdGlvbnMgZnJvbSBoYXJkd2FyZQorJGNvZGUuPTw8X19fOworCXZlb3IJQHRbM10sIEB4WzRdLCBAeFs2XQorCXZlb3IJQHRbMl0sIEB4WzVdLCBAeFs3XQorCXZlb3IJQHRbMV0sIEB4WzFdLCBAeFszXQorCXZlb3IJQHNbMV0sIEB4WzddLCBAeFs2XQorCSB2bW92CUB0WzBdLCBAdFsyXQorCXZlb3IJQHNbMF0sIEB4WzBdLCBAeFsyXQorCisJdm9ycglAdFsyXSwgQHRbMl0sIEB0WzFdCisJdmVvcglAc1szXSwgQHRbM10sIEB0WzBdCisJdmFuZAlAc1syXSwgQHRbM10sIEBzWzBdCisJdm9ycglAdFszXSwgQHRbM10sIEBzWzBdCisJdmVvcglAc1swXSwgQHNbMF0sIEB0WzFdCisJdmFuZAlAdFswXSwgQHRbMF0sIEB0WzFdCisJdmVvcglAdFsxXSwgQHhbM10sIEB4WzJdCisJdmFuZAlAc1szXSwgQHNbM10sIEBzWzBdCisJdmFuZAlAc1sxXSwgQHNbMV0sIEB0WzFdCisJdmVvcglAdFsxXSwgQHhbNF0sIEB4WzVdCisJdmVvcglAc1swXSwgQHhbMV0sIEB4WzBdCisJdmVvcglAdFszXSwgQHRbM10sIEBzWzFdCisJdmVvcglAdFsyXSwgQHRbMl0sIEBzWzFdCisJdmFuZAlAc1sxXSwgQHRbMV0sIEBzWzBdCisJdm9ycglAdFsxXSwgQHRbMV0sIEBzWzBdCisJdmVvcglAdFszXSwgQHRbM10sIEBzWzNdCisJdmVvcglAdFswXSwgQHRbMF0sIEBzWzFdCisJdmVvcglAdFsyXSwgQHRbMl0sIEBzWzJdCisJdmVvcglAdFsxXSwgQHRbMV0sIEBzWzNdCisJdmVvcglAdFswXSwgQHRbMF0sIEBzWzJdCisJdmFuZAlAc1swXSwgQHhbN10sIEB4WzNdCisJdmVvcglAdFsxXSwgQHRbMV0sIEBzWzJdCisJdmFuZAlAc1sxXSwgQHhbNl0sIEB4WzJdCisJdmFuZAlAc1syXSwgQHhbNV0sIEB4WzFdCisJdm9ycglAc1szXSwgQHhbNF0sIEB4WzBdCisJdmVvcglAdFszXSwgQHRbM10sIEBzWzBdCisJdmVvcglAdFsxXSwgQHRbMV0sIEBzWzJdCisJdmVvcglAdFswXSwgQHRbMF0sIEBzWzNdCisJdmVvcglAdFsyXSwgQHRbMl0sIEBzWzFdCisKKwlAIEludl9HRjE2IFx0MCwgXHQxLCBcdDIsIFx0MywgXHMwLCBcczEsIFxzMiwgXHMzCisKKwlAIG5ldyBzbWFsbGVyIGludmVyc2lvbgorCisJdmFuZAlAc1syXSwgQHRbM10sIEB0WzFdCisJdm1vdglAc1swXSwgQHRbMF0KKworCXZlb3IJQHNbMV0sIEB0WzJdLCBAc1syXQorCXZlb3IJQHNbM10sIEB0WzBdLCBAc1syXQorCXZlb3IJQHNbMl0sIEB0WzBdLCBAc1syXQlAIEBzWzJdPUBzWzNdCisKKwl2YnNsCUBzWzFdLCBAdFsxXSwgQHRbMF0KKwl2YnNsCUBzWzNdLCBAdFszXSwgQHRbMl0KKwl2ZW9yCUB0WzNdLCBAdFszXSwgQHRbMl0KKworCXZic2wJQHNbMF0sIEBzWzFdLCBAc1syXQorCXZic2wJQHRbMF0sIEBzWzJdLCBAc1sxXQorCisJdmFuZAlAc1syXSwgQHNbMF0sIEBzWzNdCisJdmVvcglAdFsxXSwgQHRbMV0sIEB0WzBdCisKKwl2ZW9yCUBzWzJdLCBAc1syXSwgQHRbM10KK19fXworIyBvdXRwdXQgaW4gczMsIHMyLCBzMSwgdDEKKworIyBNdWxfR0YxNl8yIFx4MCwgXHgxLCBceDIsIFx4MywgXHg0LCBceDUsIFx4NiwgXHg3LCBcdDIsIFx0MywgXHQwLCBcdDEsIFxzMCwgXHMxLCBcczIsIFxzMworCisjIE11bF9HRjE2XzIgXHgwLCBceDEsIFx4MiwgXHgzLCBceDQsIFx4NSwgXHg2LCBceDcsIFxzMywgXHMyLCBcczEsIFx0MSwgXHMwLCBcdDAsIFx0MiwgXHQzCisJJk11bF9HRjE2XzIoQHgsQHNbMywyLDFdLEB0WzFdLEBzWzBdLEB0WzAsMiwzXSk7CisKKyMjIyBvdXRwdXQgbXNiID4gW3gzLHgyLHgxLHgwLHg3LHg2LHg1LHg0XSA8IGxzYgorfQorCisjIEFFUyBsaW5lYXIgY29tcG9uZW50cworCitzdWIgU2hpZnRSb3dzIHsKK215IEB4PUBfWzAuLjddOworbXkgQHQ9QF9bOC4uMTFdOworbXkgJG1hc2s9cG9wOworJGNvZGUuPTw8X19fOworCXZsZG1pYQkka2V5ISwge0B0WzBdLUB0WzNdfQorCXZlb3IJQHRbMF0sIEB0WzBdLCBAeFswXQorCXZlb3IJQHRbMV0sIEB0WzFdLCBAeFsxXQorCXZ0YmwuOAlgJkRsbyhAeFswXSlgLCB7QHRbMF19LCBgJkRsbygkbWFzaylgCisJdnRibC44CWAmRGhpKEB4WzBdKWAsIHtAdFswXX0sIGAmRGhpKCRtYXNrKWAKKwl2bGRtaWEJJGtleSEsIHtAdFswXX0KKwl2ZW9yCUB0WzJdLCBAdFsyXSwgQHhbMl0KKwl2dGJsLjgJYCZEbG8oQHhbMV0pYCwge0B0WzFdfSwgYCZEbG8oJG1hc2spYAorCXZ0YmwuOAlgJkRoaShAeFsxXSlgLCB7QHRbMV19LCBgJkRoaSgkbWFzaylgCisJdmxkbWlhCSRrZXkhLCB7QHRbMV19CisJdmVvcglAdFszXSwgQHRbM10sIEB4WzNdCisJdnRibC44CWAmRGxvKEB4WzJdKWAsIHtAdFsyXX0sIGAmRGxvKCRtYXNrKWAKKwl2dGJsLjgJYCZEaGkoQHhbMl0pYCwge0B0WzJdfSwgYCZEaGkoJG1hc2spYAorCXZsZG1pYQkka2V5ISwge0B0WzJdfQorCXZ0YmwuOAlgJkRsbyhAeFszXSlgLCB7QHRbM119LCBgJkRsbygkbWFzaylgCisJdnRibC44CWAmRGhpKEB4WzNdKWAsIHtAdFszXX0sIGAmRGhpKCRtYXNrKWAKKwl2bGRtaWEJJGtleSEsIHtAdFszXX0KKwl2ZW9yCUB0WzBdLCBAdFswXSwgQHhbNF0KKwl2ZW9yCUB0WzFdLCBAdFsxXSwgQHhbNV0KKwl2dGJsLjgJYCZEbG8oQHhbNF0pYCwge0B0WzBdfSwgYCZEbG8oJG1hc2spYAorCXZ0YmwuOAlgJkRoaShAeFs0XSlgLCB7QHRbMF19LCBgJkRoaSgkbWFzaylgCisJdmVvcglAdFsyXSwgQHRbMl0sIEB4WzZdCisJdnRibC44CWAmRGxvKEB4WzVdKWAsIHtAdFsxXX0sIGAmRGxvKCRtYXNrKWAKKwl2dGJsLjgJYCZEaGkoQHhbNV0pYCwge0B0WzFdfSwgYCZEaGkoJG1hc2spYAorCXZlb3IJQHRbM10sIEB0WzNdLCBAeFs3XQorCXZ0YmwuOAlgJkRsbyhAeFs2XSlgLCB7QHRbMl19LCBgJkRsbygkbWFzaylgCisJdnRibC44CWAmRGhpKEB4WzZdKWAsIHtAdFsyXX0sIGAmRGhpKCRtYXNrKWAKKwl2dGJsLjgJYCZEbG8oQHhbN10pYCwge0B0WzNdfSwgYCZEbG8oJG1hc2spYAorCXZ0YmwuOAlgJkRoaShAeFs3XSlgLCB7QHRbM119LCBgJkRoaSgkbWFzaylgCitfX18KK30KKworc3ViIE1peENvbHVtbnMgeworIyBtb2RpZmllZCB0byBlbWl0IG91dHB1dCBpbiBvcmRlciBzdWl0YWJsZSBmb3IgZmVlZGluZyBiYWNrIHRvIGFlc2VuY1tsYXN0XQorbXkgQHg9QF9bMC4uN107CitteSBAdD1AX1s4Li4xNV07CitteSAkaW52PUBfWzE2XTsJIyBvcHRpb25hbAorJGNvZGUuPTw8X19fOworCXZleHQuOAlAdFswXSwgQHhbMF0sIEB4WzBdLCAjMTIJQCB4MCA8PDwgMzIKKwl2ZXh0LjgJQHRbMV0sIEB4WzFdLCBAeFsxXSwgIzEyCisJIHZlb3IJQHhbMF0sIEB4WzBdLCBAdFswXQkJQCB4MCBeICh4MCA8PDwgMzIpCisJdmV4dC44CUB0WzJdLCBAeFsyXSwgQHhbMl0sICMxMgorCSB2ZW9yCUB4WzFdLCBAeFsxXSwgQHRbMV0KKwl2ZXh0LjgJQHRbM10sIEB4WzNdLCBAeFszXSwgIzEyCisJIHZlb3IJQHhbMl0sIEB4WzJdLCBAdFsyXQorCXZleHQuOAlAdFs0XSwgQHhbNF0sIEB4WzRdLCAjMTIKKwkgdmVvcglAeFszXSwgQHhbM10sIEB0WzNdCisJdmV4dC44CUB0WzVdLCBAeFs1XSwgQHhbNV0sICMxMgorCSB2ZW9yCUB4WzRdLCBAeFs0XSwgQHRbNF0KKwl2ZXh0LjgJQHRbNl0sIEB4WzZdLCBAeFs2XSwgIzEyCisJIHZlb3IJQHhbNV0sIEB4WzVdLCBAdFs1XQorCXZleHQuOAlAdFs3XSwgQHhbN10sIEB4WzddLCAjMTIKKwkgdmVvcglAeFs2XSwgQHhbNl0sIEB0WzZdCisKKwl2ZW9yCUB0WzFdLCBAdFsxXSwgQHhbMF0KKwkgdmVvcglAeFs3XSwgQHhbN10sIEB0WzddCisJIHZleHQuOAlAeFswXSwgQHhbMF0sIEB4WzBdLCAjOAkJQCAoeDAgXiAoeDAgPDw8IDMyKSkgPDw8IDY0KQorCXZlb3IJQHRbMl0sIEB0WzJdLCBAeFsxXQorCXZlb3IJQHRbMF0sIEB0WzBdLCBAeFs3XQorCXZlb3IJQHRbMV0sIEB0WzFdLCBAeFs3XQorCSB2ZXh0LjgJQHhbMV0sIEB4WzFdLCBAeFsxXSwgIzgKKwl2ZW9yCUB0WzVdLCBAdFs1XSwgQHhbNF0KKwkgdmVvcglAeFswXSwgQHhbMF0sIEB0WzBdCisJdmVvcglAdFs2XSwgQHRbNl0sIEB4WzVdCisJIHZlb3IJQHhbMV0sIEB4WzFdLCBAdFsxXQorCSB2ZXh0LjgJQHRbMF0sIEB4WzRdLCBAeFs0XSwgIzgKKwl2ZW9yCUB0WzRdLCBAdFs0XSwgQHhbM10KKwkgdmV4dC44CUB0WzFdLCBAeFs1XSwgQHhbNV0sICM4CisJdmVvcglAdFs3XSwgQHRbN10sIEB4WzZdCisJIHZleHQuOAlAeFs0XSwgQHhbM10sIEB4WzNdLCAjOAorCXZlb3IJQHRbM10sIEB0WzNdLCBAeFsyXQorCSB2ZXh0LjgJQHhbNV0sIEB4WzddLCBAeFs3XSwgIzgKKwl2ZW9yCUB0WzRdLCBAdFs0XSwgQHhbN10KKwkgdmV4dC44CUB4WzNdLCBAeFs2XSwgQHhbNl0sICM4CisJdmVvcglAdFszXSwgQHRbM10sIEB4WzddCisJIHZleHQuOAlAeFs2XSwgQHhbMl0sIEB4WzJdLCAjOAorCXZlb3IJQHhbN10sIEB0WzFdLCBAdFs1XQorX19fCiskY29kZS49PDxfX18gaWYgKCEkaW52KTsKKwl2ZW9yCUB4WzJdLCBAdFswXSwgQHRbNF0KKwl2ZW9yCUB4WzRdLCBAeFs0XSwgQHRbM10KKwl2ZW9yCUB4WzVdLCBAeFs1XSwgQHRbN10KKwl2ZW9yCUB4WzNdLCBAeFszXSwgQHRbNl0KKwkgQCB2bW92CUB4WzJdLCBAdFswXQorCXZlb3IJQHhbNl0sIEB4WzZdLCBAdFsyXQorCSBAIHZtb3YJQHhbN10sIEB0WzFdCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGludik7CisJdmVvcglAdFszXSwgQHRbM10sIEB4WzRdCisJdmVvcglAeFs1XSwgQHhbNV0sIEB0WzddCisJdmVvcglAeFsyXSwgQHhbM10sIEB0WzZdCisJdmVvcglAeFszXSwgQHRbMF0sIEB0WzRdCisJdmVvcglAeFs0XSwgQHhbNl0sIEB0WzJdCisJdm1vdglAeFs2XSwgQHRbM10KKwkgQCB2bW92CUB4WzddLCBAdFsxXQorX19fCit9CisKK3N1YiBJbnZNaXhDb2x1bW5zX29yaWcgeworbXkgQHg9QF9bMC4uN107CitteSBAdD1AX1s4Li4xNV07CisKKyRjb2RlLj08PF9fXzsKKwlAIG11bHRpcGxpY2F0aW9uIGJ5IDB4MGUKKwl2ZXh0LjgJQHRbN10sIEB4WzddLCBAeFs3XSwgIzEyCisJdm1vdglAdFsyXSwgQHhbMl0KKwl2ZW9yCUB4WzJdLCBAeFsyXSwgQHhbNV0JCUAgMiA1CisJdmVvcglAeFs3XSwgQHhbN10sIEB4WzVdCQlAIDcgNQorCXZleHQuOAlAdFswXSwgQHhbMF0sIEB4WzBdLCAjMTIKKwl2bW92CUB0WzVdLCBAeFs1XQorCXZlb3IJQHhbNV0sIEB4WzVdLCBAeFswXQkJQCA1IDAJCVsxXQorCXZlb3IJQHhbMF0sIEB4WzBdLCBAeFsxXQkJQCAwIDEKKwl2ZXh0LjgJQHRbMV0sIEB4WzFdLCBAeFsxXSwgIzEyCisJdmVvcglAeFsxXSwgQHhbMV0sIEB4WzJdCQlAIDEgMjUKKwl2ZW9yCUB4WzBdLCBAeFswXSwgQHhbNl0JCUAgMDEgNgkJWzJdCisJdmV4dC44CUB0WzNdLCBAeFszXSwgQHhbM10sICMxMgorCXZlb3IJQHhbMV0sIEB4WzFdLCBAeFszXQkJQCAxMjUgMwkJWzRdCisJdmVvcglAeFsyXSwgQHhbMl0sIEB4WzBdCQlAIDI1IDAxNglbM10KKwl2ZW9yCUB4WzNdLCBAeFszXSwgQHhbN10JCUAgMyA3NQorCXZlb3IJQHhbN10sIEB4WzddLCBAeFs2XQkJQCA3NSA2CQlbMF0KKwl2ZXh0LjgJQHRbNl0sIEB4WzZdLCBAeFs2XSwgIzEyCisJdm1vdglAdFs0XSwgQHhbNF0KKwl2ZW9yCUB4WzZdLCBAeFs2XSwgQHhbNF0JCUAgNiA0CisJdmVvcglAeFs0XSwgQHhbNF0sIEB4WzNdCQlAIDQgMzc1CQlbNl0KKwl2ZW9yCUB4WzNdLCBAeFszXSwgQHhbN10JCUAgMzc1IDc1Nj0zNgorCXZlb3IJQHhbNl0sIEB4WzZdLCBAdFs1XQkJQCA2NCA1CQlbN10KKwl2ZW9yCUB4WzNdLCBAeFszXSwgQHRbMl0JCUAgMzYgMgorCXZleHQuOAlAdFs1XSwgQHRbNV0sIEB0WzVdLCAjMTIKKwl2ZW9yCUB4WzNdLCBAeFszXSwgQHRbNF0JCUAgMzYyIDQJCVs1XQorX19fCisJCQkJCW15IEB5ID0gQHhbNyw1LDAsMiwxLDMsNCw2XTsKKyRjb2RlLj08PF9fXzsKKwlAIG11bHRpcGxpY2F0aW9uIGJ5IDB4MGIKKwl2ZW9yCUB5WzFdLCBAeVsxXSwgQHlbMF0KKwl2ZW9yCUB5WzBdLCBAeVswXSwgQHRbMF0KKwl2ZXh0LjgJQHRbMl0sIEB0WzJdLCBAdFsyXSwgIzEyCisJdmVvcglAeVsxXSwgQHlbMV0sIEB0WzFdCisJdmVvcglAeVswXSwgQHlbMF0sIEB0WzVdCisJdmV4dC44CUB0WzRdLCBAdFs0XSwgQHRbNF0sICMxMgorCXZlb3IJQHlbMV0sIEB5WzFdLCBAdFs2XQorCXZlb3IJQHlbMF0sIEB5WzBdLCBAdFs3XQorCXZlb3IJQHRbN10sIEB0WzddLCBAdFs2XQkJQCBjbG9iYmVyIHRbN10KKworCXZlb3IJQHlbM10sIEB5WzNdLCBAdFswXQorCSB2ZW9yCUB5WzFdLCBAeVsxXSwgQHlbMF0KKwl2ZXh0LjgJQHRbMF0sIEB0WzBdLCBAdFswXSwgIzEyCisJdmVvcglAeVsyXSwgQHlbMl0sIEB0WzFdCisJdmVvcglAeVs0XSwgQHlbNF0sIEB0WzFdCisJdmV4dC44CUB0WzFdLCBAdFsxXSwgQHRbMV0sICMxMgorCXZlb3IJQHlbMl0sIEB5WzJdLCBAdFsyXQorCXZlb3IJQHlbM10sIEB5WzNdLCBAdFsyXQorCXZlb3IJQHlbNV0sIEB5WzVdLCBAdFsyXQorCXZlb3IJQHlbMl0sIEB5WzJdLCBAdFs3XQorCXZleHQuOAlAdFsyXSwgQHRbMl0sIEB0WzJdLCAjMTIKKwl2ZW9yCUB5WzNdLCBAeVszXSwgQHRbM10KKwl2ZW9yCUB5WzZdLCBAeVs2XSwgQHRbM10KKwl2ZW9yCUB5WzRdLCBAeVs0XSwgQHRbM10KKwl2ZW9yCUB5WzddLCBAeVs3XSwgQHRbNF0KKwl2ZXh0LjgJQHRbM10sIEB0WzNdLCBAdFszXSwgIzEyCisJdmVvcglAeVs1XSwgQHlbNV0sIEB0WzRdCisJdmVvcglAeVs3XSwgQHlbN10sIEB0WzddCisJdmVvcglAdFs3XSwgQHRbN10sIEB0WzVdCQlAIGNsb2JiZXIgdFs3XSBldmVuIG1vcmUKKwl2ZW9yCUB5WzNdLCBAeVszXSwgQHRbNV0KKwl2ZW9yCUB5WzRdLCBAeVs0XSwgQHRbNF0KKworCXZlb3IJQHlbNV0sIEB5WzVdLCBAdFs3XQorCXZleHQuOAlAdFs0XSwgQHRbNF0sIEB0WzRdLCAjMTIKKwl2ZW9yCUB5WzZdLCBAeVs2XSwgQHRbN10KKwl2ZW9yCUB5WzRdLCBAeVs0XSwgQHRbN10KKworCXZlb3IJQHRbN10sIEB0WzddLCBAdFs1XQorCXZleHQuOAlAdFs1XSwgQHRbNV0sIEB0WzVdLCAjMTIKKworCUAgbXVsdGlwbGljYXRpb24gYnkgMHgwZAorCXZlb3IJQHlbNF0sIEB5WzRdLCBAeVs3XQorCSB2ZW9yCUB0WzddLCBAdFs3XSwgQHRbNl0JCUAgcmVzdG9yZSB0WzddCisJdmVvcglAeVs3XSwgQHlbN10sIEB0WzRdCisJdmV4dC44CUB0WzZdLCBAdFs2XSwgQHRbNl0sICMxMgorCXZlb3IJQHlbMl0sIEB5WzJdLCBAdFswXQorCXZlb3IJQHlbN10sIEB5WzddLCBAdFs1XQorCXZleHQuOAlAdFs3XSwgQHRbN10sIEB0WzddLCAjMTIKKwl2ZW9yCUB5WzJdLCBAeVsyXSwgQHRbMl0KKworCXZlb3IJQHlbM10sIEB5WzNdLCBAeVsxXQorCXZlb3IJQHlbMV0sIEB5WzFdLCBAdFsxXQorCXZlb3IJQHlbMF0sIEB5WzBdLCBAdFswXQorCXZlb3IJQHlbM10sIEB5WzNdLCBAdFswXQorCXZlb3IJQHlbMV0sIEB5WzFdLCBAdFs1XQorCXZlb3IJQHlbMF0sIEB5WzBdLCBAdFs1XQorCXZleHQuOAlAdFswXSwgQHRbMF0sIEB0WzBdLCAjMTIKKwl2ZW9yCUB5WzFdLCBAeVsxXSwgQHRbN10KKwl2ZW9yCUB5WzBdLCBAeVswXSwgQHRbNl0KKwl2ZW9yCUB5WzNdLCBAeVszXSwgQHlbMV0KKwl2ZW9yCUB5WzRdLCBAeVs0XSwgQHRbMV0KKwl2ZXh0LjgJQHRbMV0sIEB0WzFdLCBAdFsxXSwgIzEyCisKKwl2ZW9yCUB5WzddLCBAeVs3XSwgQHRbN10KKwl2ZW9yCUB5WzRdLCBAeVs0XSwgQHRbMl0KKwl2ZW9yCUB5WzVdLCBAeVs1XSwgQHRbMl0KKwl2ZW9yCUB5WzJdLCBAeVsyXSwgQHRbNl0KKwl2ZW9yCUB0WzZdLCBAdFs2XSwgQHRbM10JCUAgY2xvYmJlciB0WzZdCisJdmV4dC44CUB0WzJdLCBAdFsyXSwgQHRbMl0sICMxMgorCXZlb3IJQHlbNF0sIEB5WzRdLCBAeVs3XQorCXZlb3IJQHlbM10sIEB5WzNdLCBAdFs2XQorCisJdmVvcglAeVs2XSwgQHlbNl0sIEB0WzZdCisJdmVvcglAeVs1XSwgQHlbNV0sIEB0WzVdCisJdmV4dC44CUB0WzVdLCBAdFs1XSwgQHRbNV0sICMxMgorCXZlb3IJQHlbNl0sIEB5WzZdLCBAdFs0XQorCXZleHQuOAlAdFs0XSwgQHRbNF0sIEB0WzRdLCAjMTIKKwl2ZW9yCUB5WzVdLCBAeVs1XSwgQHRbNl0KKwl2ZW9yCUB5WzZdLCBAeVs2XSwgQHRbN10KKwl2ZXh0LjgJQHRbN10sIEB0WzddLCBAdFs3XSwgIzEyCisJdmVvcglAdFs2XSwgQHRbNl0sIEB0WzNdCQlAIHJlc3RvcmUgdFs2XQorCXZleHQuOAlAdFszXSwgQHRbM10sIEB0WzNdLCAjMTIKKworCUAgbXVsdGlwbGljYXRpb24gYnkgMHgwOQorCXZlb3IJQHlbNF0sIEB5WzRdLCBAeVsxXQorCXZlb3IJQHRbMV0sIEB0WzFdLCBAeVsxXQkJQCB0WzFdPXlbMV0KKwl2ZW9yCUB0WzBdLCBAdFswXSwgQHRbNV0JCUAgY2xvYmJlciB0WzBdCisJdmV4dC44CUB0WzZdLCBAdFs2XSwgQHRbNl0sICMxMgorCXZlb3IJQHRbMV0sIEB0WzFdLCBAdFs1XQorCXZlb3IJQHlbM10sIEB5WzNdLCBAdFswXQorCXZlb3IJQHRbMF0sIEB0WzBdLCBAeVswXQkJQCB0WzBdPXlbMF0KKwl2ZW9yCUB0WzFdLCBAdFsxXSwgQHRbNl0KKwl2ZW9yCUB0WzZdLCBAdFs2XSwgQHRbN10JCUAgY2xvYmJlciB0WzZdCisJdmVvcglAeVs0XSwgQHlbNF0sIEB0WzFdCisJdmVvcglAeVs3XSwgQHlbN10sIEB0WzRdCisJdmVvcglAeVs2XSwgQHlbNl0sIEB0WzNdCisJdmVvcglAeVs1XSwgQHlbNV0sIEB0WzJdCisJdmVvcglAdFs0XSwgQHRbNF0sIEB5WzRdCQlAIHRbNF09eVs0XQorCXZlb3IJQHRbM10sIEB0WzNdLCBAeVszXQkJQCB0WzNdPXlbM10KKwl2ZW9yCUB0WzVdLCBAdFs1XSwgQHlbNV0JCUAgdFs1XT15WzVdCisJdmVvcglAdFsyXSwgQHRbMl0sIEB5WzJdCQlAIHRbMl09eVsyXQorCXZlb3IJQHRbM10sIEB0WzNdLCBAdFs3XQorCXZlb3IJQFhNTVs1XSwgQHRbNV0sIEB0WzZdCisJdmVvcglAWE1NWzZdLCBAdFs2XSwgQHlbNl0JCUAgdFs2XT15WzZdCisJdmVvcglAWE1NWzJdLCBAdFsyXSwgQHRbNl0KKwl2ZW9yCUBYTU1bN10sIEB0WzddLCBAeVs3XQkJQCB0WzddPXlbN10KKworCXZtb3YJQFhNTVswXSwgQHRbMF0KKwl2bW92CUBYTU1bMV0sIEB0WzFdCisJQCB2bW92CUBYTU1bMl0sIEB0WzJdCisJdm1vdglAWE1NWzNdLCBAdFszXQorCXZtb3YJQFhNTVs0XSwgQHRbNF0KKwlAIHZtb3YJQFhNTVs1XSwgQHRbNV0KKwlAIHZtb3YJQFhNTVs2XSwgQHRbNl0KKwlAIHZtb3YJQFhNTVs3XSwgQHRbN10KK19fXworfQorCitzdWIgSW52TWl4Q29sdW1ucyB7CitteSBAeD1AX1swLi43XTsKK215IEB0PUBfWzguLjE1XTsKKworIyBUaGFua3MgdG8gSnVzc2kgS2l2aWxpbm5hIGZvciBwcm92aWRpbmcgcG9pbnRlciB0bworIworIyB8IDBlIDBiIDBkIDA5IHwgICB8IDAyIDAzIDAxIDAxIHwgICB8IDA1IDAwIDA0IDAwIHwKKyMgfCAwOSAwZSAwYiAwZCB8ID0gfCAwMSAwMiAwMyAwMSB8IHggfCAwMCAwNSAwMCAwNCB8CisjIHwgMGQgMDkgMGUgMGIgfCAgIHwgMDEgMDEgMDIgMDMgfCAgIHwgMDQgMDAgMDUgMDAgfAorIyB8IDBiIDBkIDA5IDBlIHwgICB8IDAzIDAxIDAxIDAyIHwgICB8IDAwIDA0IDAwIDA1IHwKKworJGNvZGUuPTw8X19fOworCUAgbXVsdGlwbGljYXRpb24gYnkgMHgwNS0weDAwLTB4MDQtMHgwMAorCXZleHQuOAlAdFswXSwgQHhbMF0sIEB4WzBdLCAjOAorCXZleHQuOAlAdFs2XSwgQHhbNl0sIEB4WzZdLCAjOAorCXZleHQuOAlAdFs3XSwgQHhbN10sIEB4WzddLCAjOAorCXZlb3IJQHRbMF0sIEB0WzBdLCBAeFswXQorCXZleHQuOAlAdFsxXSwgQHhbMV0sIEB4WzFdLCAjOAorCXZlb3IJQHRbNl0sIEB0WzZdLCBAeFs2XQorCXZleHQuOAlAdFsyXSwgQHhbMl0sIEB4WzJdLCAjOAorCXZlb3IJQHRbN10sIEB0WzddLCBAeFs3XQorCXZleHQuOAlAdFszXSwgQHhbM10sIEB4WzNdLCAjOAorCXZlb3IJQHRbMV0sIEB0WzFdLCBAeFsxXQorCXZleHQuOAlAdFs0XSwgQHhbNF0sIEB4WzRdLCAjOAorCXZlb3IJQHRbMl0sIEB0WzJdLCBAeFsyXQorCXZleHQuOAlAdFs1XSwgQHhbNV0sIEB4WzVdLCAjOAorCXZlb3IJQHRbM10sIEB0WzNdLCBAeFszXQorCXZlb3IJQHRbNF0sIEB0WzRdLCBAeFs0XQorCXZlb3IJQHRbNV0sIEB0WzVdLCBAeFs1XQorCisJIHZlb3IJQHhbMF0sIEB4WzBdLCBAdFs2XQorCSB2ZW9yCUB4WzFdLCBAeFsxXSwgQHRbNl0KKwkgdmVvcglAeFsyXSwgQHhbMl0sIEB0WzBdCisJIHZlb3IJQHhbNF0sIEB4WzRdLCBAdFsyXQorCSB2ZW9yCUB4WzNdLCBAeFszXSwgQHRbMV0KKwkgdmVvcglAeFsxXSwgQHhbMV0sIEB0WzddCisJIHZlb3IJQHhbMl0sIEB4WzJdLCBAdFs3XQorCSB2ZW9yCUB4WzRdLCBAeFs0XSwgQHRbNl0KKwkgdmVvcglAeFs1XSwgQHhbNV0sIEB0WzNdCisJIHZlb3IJQHhbM10sIEB4WzNdLCBAdFs2XQorCSB2ZW9yCUB4WzZdLCBAeFs2XSwgQHRbNF0KKwkgdmVvcglAeFs0XSwgQHhbNF0sIEB0WzddCisJIHZlb3IJQHhbNV0sIEB4WzVdLCBAdFs3XQorCSB2ZW9yCUB4WzddLCBAeFs3XSwgQHRbNV0KK19fXworCSZNaXhDb2x1bW5zCShAeCxAdCwxKTsJIyBmbGlwcGVkIDI8LT4zIGFuZCA0PC0+NgorfQorCitzdWIgc3dhcG1vdmUgeworbXkgKCRhLCRiLCRuLCRtYXNrLCR0KT1AXzsKKyRjb2RlLj08PF9fXzsKKwl2c2hyLnU2NAkkdCwgJGIsICMkbgorCXZlb3IJCSR0LCAkdCwgJGEKKwl2YW5kCQkkdCwgJHQsICRtYXNrCisJdmVvcgkJJGEsICRhLCAkdAorCXZzaGwudTY0CSR0LCAkdCwgIyRuCisJdmVvcgkJJGIsICRiLCAkdAorX19fCit9CitzdWIgc3dhcG1vdmUyeCB7CitteSAoJGEwLCRiMCwkYTEsJGIxLCRuLCRtYXNrLCR0MCwkdDEpPUBfOworJGNvZGUuPTw8X19fOworCXZzaHIudTY0CSR0MCwgJGIwLCAjJG4KKwkgdnNoci51NjQJJHQxLCAkYjEsICMkbgorCXZlb3IJCSR0MCwgJHQwLCAkYTAKKwkgdmVvcgkJJHQxLCAkdDEsICRhMQorCXZhbmQJCSR0MCwgJHQwLCAkbWFzaworCSB2YW5kCQkkdDEsICR0MSwgJG1hc2sKKwl2ZW9yCQkkYTAsICRhMCwgJHQwCisJdnNobC51NjQJJHQwLCAkdDAsICMkbgorCSB2ZW9yCQkkYTEsICRhMSwgJHQxCisJIHZzaGwudTY0CSR0MSwgJHQxLCAjJG4KKwl2ZW9yCQkkYjAsICRiMCwgJHQwCisJIHZlb3IJCSRiMSwgJGIxLCAkdDEKK19fXworfQorCitzdWIgYml0c2xpY2UgeworbXkgQHg9cmV2ZXJzZShAX1swLi43XSk7CitteSAoJHQwLCR0MSwkdDIsJHQzKT1AX1s4Li4xMV07CiskY29kZS49PDxfX187CisJdm1vdi5pOAkkdDAsIzB4NTUJCQlAIGNvbXBvc2UgLkxCUzAKKwl2bW92Lmk4CSR0MSwjMHgzMwkJCUAgY29tcG9zZSAuTEJTMQorX19fCisJJnN3YXBtb3ZlMngoQHhbMCwxLDIsM10sMSwkdDAsJHQyLCR0Myk7CisJJnN3YXBtb3ZlMngoQHhbNCw1LDYsN10sMSwkdDAsJHQyLCR0Myk7CiskY29kZS49PDxfX187CisJdm1vdi5pOAkkdDAsIzB4MGYJCQlAIGNvbXBvc2UgLkxCUzIKK19fXworCSZzd2FwbW92ZTJ4KEB4WzAsMiwxLDNdLDIsJHQxLCR0MiwkdDMpOworCSZzd2FwbW92ZTJ4KEB4WzQsNiw1LDddLDIsJHQxLCR0MiwkdDMpOworCisJJnN3YXBtb3ZlMngoQHhbMCw0LDEsNV0sNCwkdDAsJHQyLCR0Myk7CisJJnN3YXBtb3ZlMngoQHhbMiw2LDMsN10sNCwkdDAsJHQyLCR0Myk7Cit9CisKKyRjb2RlLj08PF9fXzsKKyNpZm5kZWYgX19LRVJORUxfXworIyBpbmNsdWRlICJhcm1fYXJjaC5oIgorCisjIGRlZmluZSBWRlBfQUJJX1BVU0gJdnN0bWRiCXNwISx7ZDgtZDE1fQorIyBkZWZpbmUgVkZQX0FCSV9QT1AJdmxkbWlhCXNwISx7ZDgtZDE1fQorIyBkZWZpbmUgVkZQX0FCSV9GUkFNRQkweDQwCisjZWxzZQorIyBkZWZpbmUgVkZQX0FCSV9QVVNICisjIGRlZmluZSBWRlBfQUJJX1BPUAorIyBkZWZpbmUgVkZQX0FCSV9GUkFNRQkwCisjIGRlZmluZSBCU0FFU19BU01fRVhURU5ERURfS0VZCisjIGRlZmluZSBYVFNfQ0hBSU5fVFdFQUsKKyMgZGVmaW5lIF9fQVJNX0FSQ0hfXyBfX0xJTlVYX0FSTV9BUkNIX18KKyNlbmRpZgorCisjaWZkZWYgX190aHVtYl9fCisjIGRlZmluZSBhZHJsIGFkcgorI2VuZGlmCisKKyNpZiBfX0FSTV9BUkNIX18+PTcKKy50ZXh0Cisuc3ludGF4CXVuaWZpZWQgCUAgQVJNdjctY2FwYWJsZSBhc3NlbWJsZXIgaXMgZXhwZWN0ZWQgdG8gaGFuZGxlIHRoaXMKKyNpZmRlZiBfX3RodW1iMl9fCisudGh1bWIKKyNlbHNlCisuY29kZSAgIDMyCisjZW5kaWYKKworLmZwdQluZW9uCisKKy50eXBlCV9ic2Flc19kZWNyeXB0OCwlZnVuY3Rpb24KKy5hbGlnbgk0CitfYnNhZXNfZGVjcnlwdDg6CisJYWRyCSRjb25zdCxfYnNhZXNfZGVjcnlwdDgKKwl2bGRtaWEJJGtleSEsIHtAWE1NWzldfQkJQCByb3VuZCAwIGtleQorCWFkZAkkY29uc3QsJGNvbnN0LCMuTE0wSVNSLV9ic2Flc19kZWNyeXB0OAorCisJdmxkbWlhCSRjb25zdCEsIHtAWE1NWzhdfQkJQCAuTE0wSVNSCisJdmVvcglAWE1NWzEwXSwgQFhNTVswXSwgQFhNTVs5XQlAIHhvciB3aXRoIHJvdW5kMCBrZXkKKwl2ZW9yCUBYTU1bMTFdLCBAWE1NWzFdLCBAWE1NWzldCisJIHZ0YmwuOAlgJkRsbyhAWE1NWzBdKWAsIHtAWE1NWzEwXX0sIGAmRGxvKEBYTU1bOF0pYAorCSB2dGJsLjgJYCZEaGkoQFhNTVswXSlgLCB7QFhNTVsxMF19LCBgJkRoaShAWE1NWzhdKWAKKwl2ZW9yCUBYTU1bMTJdLCBAWE1NWzJdLCBAWE1NWzldCisJIHZ0YmwuOAlgJkRsbyhAWE1NWzFdKWAsIHtAWE1NWzExXX0sIGAmRGxvKEBYTU1bOF0pYAorCSB2dGJsLjgJYCZEaGkoQFhNTVsxXSlgLCB7QFhNTVsxMV19LCBgJkRoaShAWE1NWzhdKWAKKwl2ZW9yCUBYTU1bMTNdLCBAWE1NWzNdLCBAWE1NWzldCisJIHZ0YmwuOAlgJkRsbyhAWE1NWzJdKWAsIHtAWE1NWzEyXX0sIGAmRGxvKEBYTU1bOF0pYAorCSB2dGJsLjgJYCZEaGkoQFhNTVsyXSlgLCB7QFhNTVsxMl19LCBgJkRoaShAWE1NWzhdKWAKKwl2ZW9yCUBYTU1bMTRdLCBAWE1NWzRdLCBAWE1NWzldCisJIHZ0YmwuOAlgJkRsbyhAWE1NWzNdKWAsIHtAWE1NWzEzXX0sIGAmRGxvKEBYTU1bOF0pYAorCSB2dGJsLjgJYCZEaGkoQFhNTVszXSlgLCB7QFhNTVsxM119LCBgJkRoaShAWE1NWzhdKWAKKwl2ZW9yCUBYTU1bMTVdLCBAWE1NWzVdLCBAWE1NWzldCisJIHZ0YmwuOAlgJkRsbyhAWE1NWzRdKWAsIHtAWE1NWzE0XX0sIGAmRGxvKEBYTU1bOF0pYAorCSB2dGJsLjgJYCZEaGkoQFhNTVs0XSlgLCB7QFhNTVsxNF19LCBgJkRoaShAWE1NWzhdKWAKKwl2ZW9yCUBYTU1bMTBdLCBAWE1NWzZdLCBAWE1NWzldCisJIHZ0YmwuOAlgJkRsbyhAWE1NWzVdKWAsIHtAWE1NWzE1XX0sIGAmRGxvKEBYTU1bOF0pYAorCSB2dGJsLjgJYCZEaGkoQFhNTVs1XSlgLCB7QFhNTVsxNV19LCBgJkRoaShAWE1NWzhdKWAKKwl2ZW9yCUBYTU1bMTFdLCBAWE1NWzddLCBAWE1NWzldCisJIHZ0YmwuOAlgJkRsbyhAWE1NWzZdKWAsIHtAWE1NWzEwXX0sIGAmRGxvKEBYTU1bOF0pYAorCSB2dGJsLjgJYCZEaGkoQFhNTVs2XSlgLCB7QFhNTVsxMF19LCBgJkRoaShAWE1NWzhdKWAKKwkgdnRibC44CWAmRGxvKEBYTU1bN10pYCwge0BYTU1bMTFdfSwgYCZEbG8oQFhNTVs4XSlgCisJIHZ0YmwuOAlgJkRoaShAWE1NWzddKWAsIHtAWE1NWzExXX0sIGAmRGhpKEBYTU1bOF0pYAorX19fCisJJmJpdHNsaWNlCShAWE1NWzAuLjcsIDguLjExXSk7CiskY29kZS49PDxfX187CisJc3ViCSRyb3VuZHMsJHJvdW5kcywjMQorCWIJLkxkZWNfc2JveAorLmFsaWduCTQKKy5MZGVjX2xvb3A6CitfX18KKwkmU2hpZnRSb3dzCShAWE1NWzAuLjcsIDguLjEyXSk7CiskY29kZS49Ii5MZGVjX3Nib3g6XG4iOworCSZJbnZTYm94CShAWE1NWzAuLjcsIDguLjE1XSk7CiskY29kZS49PDxfX187CisJc3Vicwkkcm91bmRzLCRyb3VuZHMsIzEKKwliY2MJLkxkZWNfZG9uZQorX19fCisJJkludk1peENvbHVtbnMJKEBYTU1bMCwxLDYsNCwyLDcsMyw1LCA4Li4xNV0pOworJGNvZGUuPTw8X19fOworCXZsZG1pYQkkY29uc3QsIHtAWE1NWzEyXX0JCUAgLkxJU1IKKwlpdGUJZXEJCQkJQCBUaHVtYjIgdGhpbmcsIHNhbml0eSBjaGVjayBpbiBBUk0KKwlhZGRlcQkkY29uc3QsJGNvbnN0LCMweDEwCisJYm5lCS5MZGVjX2xvb3AKKwl2bGRtaWEJJGNvbnN0LCB7QFhNTVsxMl19CQlAIC5MSVNSTTAKKwliCS5MZGVjX2xvb3AKKy5hbGlnbgk0CisuTGRlY19kb25lOgorX19fCisJJmJpdHNsaWNlCShAWE1NWzAsMSw2LDQsMiw3LDMsNSwgOC4uMTFdKTsKKyRjb2RlLj08PF9fXzsKKwl2bGRtaWEJJGtleSwge0BYTU1bOF19CQkJQCBsYXN0IHJvdW5kIGtleQorCXZlb3IJQFhNTVs2XSwgQFhNTVs2XSwgQFhNTVs4XQorCXZlb3IJQFhNTVs0XSwgQFhNTVs0XSwgQFhNTVs4XQorCXZlb3IJQFhNTVsyXSwgQFhNTVsyXSwgQFhNTVs4XQorCXZlb3IJQFhNTVs3XSwgQFhNTVs3XSwgQFhNTVs4XQorCXZlb3IJQFhNTVszXSwgQFhNTVszXSwgQFhNTVs4XQorCXZlb3IJQFhNTVs1XSwgQFhNTVs1XSwgQFhNTVs4XQorCXZlb3IJQFhNTVswXSwgQFhNTVswXSwgQFhNTVs4XQorCXZlb3IJQFhNTVsxXSwgQFhNTVsxXSwgQFhNTVs4XQorCWJ4CWxyCisuc2l6ZQlfYnNhZXNfZGVjcnlwdDgsLi1fYnNhZXNfZGVjcnlwdDgKKworLnR5cGUJX2JzYWVzX2NvbnN0LCVvYmplY3QKKy5hbGlnbgk2CitfYnNhZXNfY29uc3Q6CisuTE0wSVNSOglAIEludlNoaWZ0Um93cyBjb25zdGFudHMKKwkucXVhZAkweDBhMGUwMjA2MDcwYjBmMDMsIDB4MDAwNDA4MGMwZDAxMDUwOQorLkxJU1I6CisJLnF1YWQJMHgwNTA0MDcwNjAyMDEwMDAzLCAweDBmMGUwZDBjMDgwYjBhMDkKKy5MSVNSTTA6CisJLnF1YWQJMHgwMTA0MGIwZTAyMDUwODBmLCAweDAzMDYwOTBjMDAwNzBhMGQKKy5MTTBTUjoJCUAgU2hpZnRSb3dzIGNvbnN0YW50cworCS5xdWFkCTB4MGEwZTAyMDYwZjAzMDcwYiwgMHgwMDA0MDgwYzA1MDkwZDAxCisuTFNSOgorCS5xdWFkCTB4MDUwNDA3MDYwMDAzMDIwMSwgMHgwZjBlMGQwYzBhMDkwODBiCisuTFNSTTA6CisJLnF1YWQJMHgwMzA0MDkwZTAwMDUwYTBmLCAweDAxMDYwYjBjMDIwNzA4MGQKKy5MTTA6CisJLnF1YWQJMHgwMjA2MGEwZTAzMDcwYjBmLCAweDAwMDQwODBjMDEwNTA5MGQKKy5MUkVWTTBTUjoKKwkucXVhZAkweDA5MGQwMTA1MGMwMDA0MDgsIDB4MDMwNzBiMGYwNjBhMGUwMgorLmFzY2l6CSJCaXQtc2xpY2VkIEFFUyBmb3IgTkVPTiwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5hbGlnbgk2Cisuc2l6ZQlfYnNhZXNfY29uc3QsLi1fYnNhZXNfY29uc3QKKworLnR5cGUJX2JzYWVzX2VuY3J5cHQ4LCVmdW5jdGlvbgorLmFsaWduCTQKK19ic2Flc19lbmNyeXB0ODoKKwlhZHIJJGNvbnN0LF9ic2Flc19lbmNyeXB0OAorCXZsZG1pYQkka2V5ISwge0BYTU1bOV19CQlAIHJvdW5kIDAga2V5CisJc3ViCSRjb25zdCwkY29uc3QsI19ic2Flc19lbmNyeXB0OC0uTE0wU1IKKworCXZsZG1pYQkkY29uc3QhLCB7QFhNTVs4XX0JCUAgLkxNMFNSCitfYnNhZXNfZW5jcnlwdDhfYWx0OgorCXZlb3IJQFhNTVsxMF0sIEBYTU1bMF0sIEBYTU1bOV0JQCB4b3Igd2l0aCByb3VuZDAga2V5CisJdmVvcglAWE1NWzExXSwgQFhNTVsxXSwgQFhNTVs5XQorCSB2dGJsLjgJYCZEbG8oQFhNTVswXSlgLCB7QFhNTVsxMF19LCBgJkRsbyhAWE1NWzhdKWAKKwkgdnRibC44CWAmRGhpKEBYTU1bMF0pYCwge0BYTU1bMTBdfSwgYCZEaGkoQFhNTVs4XSlgCisJdmVvcglAWE1NWzEyXSwgQFhNTVsyXSwgQFhNTVs5XQorCSB2dGJsLjgJYCZEbG8oQFhNTVsxXSlgLCB7QFhNTVsxMV19LCBgJkRsbyhAWE1NWzhdKWAKKwkgdnRibC44CWAmRGhpKEBYTU1bMV0pYCwge0BYTU1bMTFdfSwgYCZEaGkoQFhNTVs4XSlgCisJdmVvcglAWE1NWzEzXSwgQFhNTVszXSwgQFhNTVs5XQorCSB2dGJsLjgJYCZEbG8oQFhNTVsyXSlgLCB7QFhNTVsxMl19LCBgJkRsbyhAWE1NWzhdKWAKKwkgdnRibC44CWAmRGhpKEBYTU1bMl0pYCwge0BYTU1bMTJdfSwgYCZEaGkoQFhNTVs4XSlgCisJdmVvcglAWE1NWzE0XSwgQFhNTVs0XSwgQFhNTVs5XQorCSB2dGJsLjgJYCZEbG8oQFhNTVszXSlgLCB7QFhNTVsxM119LCBgJkRsbyhAWE1NWzhdKWAKKwkgdnRibC44CWAmRGhpKEBYTU1bM10pYCwge0BYTU1bMTNdfSwgYCZEaGkoQFhNTVs4XSlgCisJdmVvcglAWE1NWzE1XSwgQFhNTVs1XSwgQFhNTVs5XQorCSB2dGJsLjgJYCZEbG8oQFhNTVs0XSlgLCB7QFhNTVsxNF19LCBgJkRsbyhAWE1NWzhdKWAKKwkgdnRibC44CWAmRGhpKEBYTU1bNF0pYCwge0BYTU1bMTRdfSwgYCZEaGkoQFhNTVs4XSlgCisJdmVvcglAWE1NWzEwXSwgQFhNTVs2XSwgQFhNTVs5XQorCSB2dGJsLjgJYCZEbG8oQFhNTVs1XSlgLCB7QFhNTVsxNV19LCBgJkRsbyhAWE1NWzhdKWAKKwkgdnRibC44CWAmRGhpKEBYTU1bNV0pYCwge0BYTU1bMTVdfSwgYCZEaGkoQFhNTVs4XSlgCisJdmVvcglAWE1NWzExXSwgQFhNTVs3XSwgQFhNTVs5XQorCSB2dGJsLjgJYCZEbG8oQFhNTVs2XSlgLCB7QFhNTVsxMF19LCBgJkRsbyhAWE1NWzhdKWAKKwkgdnRibC44CWAmRGhpKEBYTU1bNl0pYCwge0BYTU1bMTBdfSwgYCZEaGkoQFhNTVs4XSlgCisJIHZ0YmwuOAlgJkRsbyhAWE1NWzddKWAsIHtAWE1NWzExXX0sIGAmRGxvKEBYTU1bOF0pYAorCSB2dGJsLjgJYCZEaGkoQFhNTVs3XSlgLCB7QFhNTVsxMV19LCBgJkRoaShAWE1NWzhdKWAKK19ic2Flc19lbmNyeXB0OF9iaXRzbGljZToKK19fXworCSZiaXRzbGljZQkoQFhNTVswLi43LCA4Li4xMV0pOworJGNvZGUuPTw8X19fOworCXN1Ygkkcm91bmRzLCRyb3VuZHMsIzEKKwliCS5MZW5jX3Nib3gKKy5hbGlnbgk0CisuTGVuY19sb29wOgorX19fCisJJlNoaWZ0Um93cwkoQFhNTVswLi43LCA4Li4xMl0pOworJGNvZGUuPSIuTGVuY19zYm94OlxuIjsKKwkmU2JveAkJKEBYTU1bMC4uNywgOC4uMTVdKTsKKyRjb2RlLj08PF9fXzsKKwlzdWJzCSRyb3VuZHMsJHJvdW5kcywjMQorCWJjYwkuTGVuY19kb25lCitfX18KKwkmTWl4Q29sdW1ucwkoQFhNTVswLDEsNCw2LDMsNywyLDUsIDguLjE1XSk7CiskY29kZS49PDxfX187CisJdmxkbWlhCSRjb25zdCwge0BYTU1bMTJdfQkJQCAuTFNSCisJaXRlCWVxCQkJCUAgVGh1bWIyIHRoaW5nLCBzYW1pdHkgY2hlY2sgaW4gQVJNCisJYWRkZXEJJGNvbnN0LCRjb25zdCwjMHgxMAorCWJuZQkuTGVuY19sb29wCisJdmxkbWlhCSRjb25zdCwge0BYTU1bMTJdfQkJQCAuTFNSTTAKKwliCS5MZW5jX2xvb3AKKy5hbGlnbgk0CisuTGVuY19kb25lOgorX19fCisJIyBvdXRwdXQgaW4gbHNiID4gW3QwLCB0MSwgdDQsIHQ2LCB0MywgdDcsIHQyLCB0NV0gPCBtc2IKKwkmYml0c2xpY2UJKEBYTU1bMCwxLDQsNiwzLDcsMiw1LCA4Li4xMV0pOworJGNvZGUuPTw8X19fOworCXZsZG1pYQkka2V5LCB7QFhNTVs4XX0JCQlAIGxhc3Qgcm91bmQga2V5CisJdmVvcglAWE1NWzRdLCBAWE1NWzRdLCBAWE1NWzhdCisJdmVvcglAWE1NWzZdLCBAWE1NWzZdLCBAWE1NWzhdCisJdmVvcglAWE1NWzNdLCBAWE1NWzNdLCBAWE1NWzhdCisJdmVvcglAWE1NWzddLCBAWE1NWzddLCBAWE1NWzhdCisJdmVvcglAWE1NWzJdLCBAWE1NWzJdLCBAWE1NWzhdCisJdmVvcglAWE1NWzVdLCBAWE1NWzVdLCBAWE1NWzhdCisJdmVvcglAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWzhdCisJdmVvcglAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWzhdCisJYngJbHIKKy5zaXplCV9ic2Flc19lbmNyeXB0OCwuLV9ic2Flc19lbmNyeXB0OAorX19fCit9Cit7CitteSAoJG91dCwkaW5wLCRyb3VuZHMsJGNvbnN0KT0oInIxMiIsInI0IiwicjUiLCJyNiIpOworCitzdWIgYml0c2xpY2Vfa2V5IHsKK215IEB4PXJldmVyc2UoQF9bMC4uN10pOworbXkgKCRiczAsJGJzMSwkYnMyLCR0MiwkdDMpPUBfWzguLjEyXTsKKworCSZzd2FwbW92ZQkoQHhbMCwxXSwxLCRiczAsJHQyLCR0Myk7CiskY29kZS49PDxfX187CisJQCAmc3dhcG1vdmUoQHhbMiwzXSwxLCR0MCwkdDIsJHQzKTsKKwl2bW92CUB4WzJdLCBAeFswXQorCXZtb3YJQHhbM10sIEB4WzFdCitfX18KKwkjJnN3YXBtb3ZlMngoQHhbNCw1LDYsN10sMSwkdDAsJHQyLCR0Myk7CisKKwkmc3dhcG1vdmUyeAkoQHhbMCwyLDEsM10sMiwkYnMxLCR0MiwkdDMpOworJGNvZGUuPTw8X19fOworCUAgJnN3YXBtb3ZlMngoQHhbNCw2LDUsN10sMiwkdDEsJHQyLCR0Myk7CisJdm1vdglAeFs0XSwgQHhbMF0KKwl2bW92CUB4WzZdLCBAeFsyXQorCXZtb3YJQHhbNV0sIEB4WzFdCisJdm1vdglAeFs3XSwgQHhbM10KK19fXworCSZzd2FwbW92ZTJ4CShAeFswLDQsMSw1XSw0LCRiczIsJHQyLCR0Myk7CisJJnN3YXBtb3ZlMngJKEB4WzIsNiwzLDddLDQsJGJzMiwkdDIsJHQzKTsKK30KKworJGNvZGUuPTw8X19fOworLnR5cGUJX2JzYWVzX2tleV9jb252ZXJ0LCVmdW5jdGlvbgorLmFsaWduCTQKK19ic2Flc19rZXlfY29udmVydDoKKwlhZHIJJGNvbnN0LF9ic2Flc19rZXlfY29udmVydAorCXZsZDEuOAl7QFhNTVs3XX0sICBbJGlucF0hCQlAIGxvYWQgcm91bmQgMCBrZXkKKwlzdWIJJGNvbnN0LCRjb25zdCwjX2JzYWVzX2tleV9jb252ZXJ0LS5MTTAKKwl2bGQxLjgJe0BYTU1bMTVdfSwgWyRpbnBdIQkJQCBsb2FkIHJvdW5kIDEga2V5CisKKwl2bW92Lmk4CUBYTU1bOF0sICAjMHgwMQkJCUAgYml0IG1hc2tzCisJdm1vdi5pOAlAWE1NWzldLCAgIzB4MDIKKwl2bW92Lmk4CUBYTU1bMTBdLCAjMHgwNAorCXZtb3YuaTgJQFhNTVsxMV0sICMweDA4CisJdm1vdi5pOAlAWE1NWzEyXSwgIzB4MTAKKwl2bW92Lmk4CUBYTU1bMTNdLCAjMHgyMAorCXZsZG1pYQkkY29uc3QsIHtAWE1NWzE0XX0JCUAgLkxNMAorCisjaWZkZWYgX19BUk1FTF9fCisJdnJldjMyLjgJQFhNTVs3XSwgIEBYTU1bN10KKwl2cmV2MzIuOAlAWE1NWzE1XSwgQFhNTVsxNV0KKyNlbmRpZgorCXN1Ygkkcm91bmRzLCRyb3VuZHMsIzEKKwl2c3RtaWEJJG91dCEsIHtAWE1NWzddfQkJQCBzYXZlIHJvdW5kIDAga2V5CisJYgkuTGtleV9sb29wCisKKy5hbGlnbgk0CisuTGtleV9sb29wOgorCXZ0YmwuOAlgJkRsbyhAWE1NWzddKWAse0BYTU1bMTVdfSxgJkRsbyhAWE1NWzE0XSlgCisJdnRibC44CWAmRGhpKEBYTU1bN10pYCx7QFhNTVsxNV19LGAmRGhpKEBYTU1bMTRdKWAKKwl2bW92Lmk4CUBYTU1bNl0sICAjMHg0MAorCXZtb3YuaTgJQFhNTVsxNV0sICMweDgwCisKKwl2dHN0LjgJQFhNTVswXSwgQFhNTVs3XSwgQFhNTVs4XQorCXZ0c3QuOAlAWE1NWzFdLCBAWE1NWzddLCBAWE1NWzldCisJdnRzdC44CUBYTU1bMl0sIEBYTU1bN10sIEBYTU1bMTBdCisJdnRzdC44CUBYTU1bM10sIEBYTU1bN10sIEBYTU1bMTFdCisJdnRzdC44CUBYTU1bNF0sIEBYTU1bN10sIEBYTU1bMTJdCisJdnRzdC44CUBYTU1bNV0sIEBYTU1bN10sIEBYTU1bMTNdCisJdnRzdC44CUBYTU1bNl0sIEBYTU1bN10sIEBYTU1bNl0KKwl2dHN0LjgJQFhNTVs3XSwgQFhNTVs3XSwgQFhNTVsxNV0KKwl2bGQxLjgJe0BYTU1bMTVdfSwgWyRpbnBdIQkJQCBsb2FkIG5leHQgcm91bmQga2V5CisJdm12bglAWE1NWzBdLCBAWE1NWzBdCQlAICJwbm90IgorCXZtdm4JQFhNTVsxXSwgQFhNTVsxXQorCXZtdm4JQFhNTVs1XSwgQFhNTVs1XQorCXZtdm4JQFhNTVs2XSwgQFhNTVs2XQorI2lmZGVmIF9fQVJNRUxfXworCXZyZXYzMi44CUBYTU1bMTVdLCBAWE1NWzE1XQorI2VuZGlmCisJc3Vicwkkcm91bmRzLCRyb3VuZHMsIzEKKwl2c3RtaWEJJG91dCEse0BYTU1bMF0tQFhNTVs3XX0JCUAgd3JpdGUgYml0LXNsaWNlZCByb3VuZCBrZXkKKwlibmUJLkxrZXlfbG9vcAorCisJdm1vdi5pOAlAWE1NWzddLCMweDYzCQkJQCBjb21wb3NlIC5MNjMKKwlAIGRvbid0IHNhdmUgbGFzdCByb3VuZCBrZXkKKwlieAlscgorLnNpemUJX2JzYWVzX2tleV9jb252ZXJ0LC4tX2JzYWVzX2tleV9jb252ZXJ0CitfX18KK30KKworaWYgKDApIHsJCSMgZm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIGFyZSB1bnN1cHBvcnRlZCBpbnRlcmZhY2UKKwkJCSMgdXNlZCBmb3IgYmVuY2htYXJraW5nLi4uCiskY29kZS49PDxfX187CisuZ2xvYmwJYnNhZXNfZW5jX2tleV9jb252ZXJ0CisudHlwZQlic2Flc19lbmNfa2V5X2NvbnZlcnQsJWZ1bmN0aW9uCisuYWxpZ24JNAorYnNhZXNfZW5jX2tleV9jb252ZXJ0OgorCXN0bWRiCXNwISx7cjQtcjYsbHJ9CisJdnN0bWRiCXNwISx7ZDgtZDE1fQkJQCBBQkkgc3BlY2lmaWNhdGlvbiBzYXlzIHNvCisKKwlsZHIJcjUsWyRpbnAsIzI0MF0JCQlAIHBhc3Mgcm91bmRzCisJbW92CXI0LCRpbnAJCQkJQCBwYXNzIGtleQorCW1vdglyMTIsJG91dAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKwlibAlfYnNhZXNfa2V5X2NvbnZlcnQKKwl2ZW9yCUBYTU1bN10sQFhNTVs3XSxAWE1NWzE1XQlAIGZpeCB1cCBsYXN0IHJvdW5kIGtleQorCXZzdG1pYQlyMTIsIHtAWE1NWzddfQkJCUAgc2F2ZSBsYXN0IHJvdW5kIGtleQorCisJdmxkbWlhCXNwISx7ZDgtZDE1fQorCWxkbWlhCXNwISx7cjQtcjYscGN9Cisuc2l6ZQlic2Flc19lbmNfa2V5X2NvbnZlcnQsLi1ic2Flc19lbmNfa2V5X2NvbnZlcnQKKworLmdsb2JsCWJzYWVzX2VuY3J5cHRfMTI4CisudHlwZQlic2Flc19lbmNyeXB0XzEyOCwlZnVuY3Rpb24KKy5hbGlnbgk0Citic2Flc19lbmNyeXB0XzEyODoKKwlzdG1kYglzcCEse3I0LXI2LGxyfQorCXZzdG1kYglzcCEse2Q4LWQxNX0JCUAgQUJJIHNwZWNpZmljYXRpb24gc2F5cyBzbworLkxlbmMxMjhfbG9vcDoKKwl2bGQxLjgJe0BYTU1bMF0tQFhNTVsxXX0sIFskaW5wXSEJQCBsb2FkIGlucHV0CisJdmxkMS44CXtAWE1NWzJdLUBYTU1bM119LCBbJGlucF0hCisJbW92CXI0LCRrZXkJCQkJQCBwYXNzIHRoZSBrZXkKKwl2bGQxLjgJe0BYTU1bNF0tQFhNTVs1XX0sIFskaW5wXSEKKwltb3YJcjUsIzEwCQkJCUAgcGFzcyByb3VuZHMKKwl2bGQxLjgJe0BYTU1bNl0tQFhNTVs3XX0sIFskaW5wXSEKKworCWJsCV9ic2Flc19lbmNyeXB0OAorCisJdnN0MS44CXtAWE1NWzBdLUBYTU1bMV19LCBbJG91dF0hCUAgd3JpdGUgb3V0cHV0CisJdnN0MS44CXtAWE1NWzRdfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVs2XX0sIFskb3V0XSEKKwl2c3QxLjgJe0BYTU1bM119LCBbJG91dF0hCisJdnN0MS44CXtAWE1NWzddfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVsyXX0sIFskb3V0XSEKKwlzdWJzCSRsZW4sJGxlbiwjMHg4MAorCXZzdDEuOAl7QFhNTVs1XX0sIFskb3V0XSEKKwliaGkJLkxlbmMxMjhfbG9vcAorCisJdmxkbWlhCXNwISx7ZDgtZDE1fQorCWxkbWlhCXNwISx7cjQtcjYscGN9Cisuc2l6ZQlic2Flc19lbmNyeXB0XzEyOCwuLWJzYWVzX2VuY3J5cHRfMTI4CisKKy5nbG9ibAlic2Flc19kZWNfa2V5X2NvbnZlcnQKKy50eXBlCWJzYWVzX2RlY19rZXlfY29udmVydCwlZnVuY3Rpb24KKy5hbGlnbgk0Citic2Flc19kZWNfa2V5X2NvbnZlcnQ6CisJc3RtZGIJc3AhLHtyNC1yNixscn0KKwl2c3RtZGIJc3AhLHtkOC1kMTV9CQlAIEFCSSBzcGVjaWZpY2F0aW9uIHNheXMgc28KKworCWxkcglyNSxbJGlucCwjMjQwXQkJCUAgcGFzcyByb3VuZHMKKwltb3YJcjQsJGlucAkJCQlAIHBhc3Mga2V5CisJbW92CXIxMiwkb3V0CQkJQCBwYXNzIGtleSBzY2hlZHVsZQorCWJsCV9ic2Flc19rZXlfY29udmVydAorCXZsZG1pYQkkb3V0LCB7QFhNTVs2XX0KKwl2c3RtaWEJcjEyLCAge0BYTU1bMTVdfQkJQCBzYXZlIGxhc3Qgcm91bmQga2V5CisJdmVvcglAWE1NWzddLCBAWE1NWzddLCBAWE1NWzZdCUAgZml4IHVwIHJvdW5kIDAga2V5CisJdnN0bWlhCSRvdXQsIHtAWE1NWzddfQorCisJdmxkbWlhCXNwISx7ZDgtZDE1fQorCWxkbWlhCXNwISx7cjQtcjYscGN9Cisuc2l6ZQlic2Flc19kZWNfa2V5X2NvbnZlcnQsLi1ic2Flc19kZWNfa2V5X2NvbnZlcnQKKworLmdsb2JsCWJzYWVzX2RlY3J5cHRfMTI4CisudHlwZQlic2Flc19kZWNyeXB0XzEyOCwlZnVuY3Rpb24KKy5hbGlnbgk0Citic2Flc19kZWNyeXB0XzEyODoKKwlzdG1kYglzcCEse3I0LXI2LGxyfQorCXZzdG1kYglzcCEse2Q4LWQxNX0JCUAgQUJJIHNwZWNpZmljYXRpb24gc2F5cyBzbworLkxkZWMxMjhfbG9vcDoKKwl2bGQxLjgJe0BYTU1bMF0tQFhNTVsxXX0sIFskaW5wXSEJQCBsb2FkIGlucHV0CisJdmxkMS44CXtAWE1NWzJdLUBYTU1bM119LCBbJGlucF0hCisJbW92CXI0LCRrZXkJCQkJQCBwYXNzIHRoZSBrZXkKKwl2bGQxLjgJe0BYTU1bNF0tQFhNTVs1XX0sIFskaW5wXSEKKwltb3YJcjUsIzEwCQkJCUAgcGFzcyByb3VuZHMKKwl2bGQxLjgJe0BYTU1bNl0tQFhNTVs3XX0sIFskaW5wXSEKKworCWJsCV9ic2Flc19kZWNyeXB0OAorCisJdnN0MS44CXtAWE1NWzBdLUBYTU1bMV19LCBbJG91dF0hCUAgd3JpdGUgb3V0cHV0CisJdnN0MS44CXtAWE1NWzZdfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVs0XX0sIFskb3V0XSEKKwl2c3QxLjgJe0BYTU1bMl19LCBbJG91dF0hCisJdnN0MS44CXtAWE1NWzddfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVszXX0sIFskb3V0XSEKKwlzdWJzCSRsZW4sJGxlbiwjMHg4MAorCXZzdDEuOAl7QFhNTVs1XX0sIFskb3V0XSEKKwliaGkJLkxkZWMxMjhfbG9vcAorCisJdmxkbWlhCXNwISx7ZDgtZDE1fQorCWxkbWlhCXNwISx7cjQtcjYscGN9Cisuc2l6ZQlic2Flc19kZWNyeXB0XzEyOCwuLWJzYWVzX2RlY3J5cHRfMTI4CitfX18KK30KK3sKK215ICgkaW5wLCRvdXQsJGxlbiwka2V5LCAkaXZwLCRmcCwkcm91bmRzKT1tYXAoInIkXyIsKDAuLjMsOC4uMTApKTsKK215ICgka2V5c2NoZWQpPSgic3AiKTsKKworJGNvZGUuPTw8X19fOworLmV4dGVybiBBRVNfY2JjX2VuY3J5cHQKKy5leHRlcm4gQUVTX2RlY3J5cHQKKworLmdsb2JhbAlic2Flc19jYmNfZW5jcnlwdAorLnR5cGUJYnNhZXNfY2JjX2VuY3J5cHQsJWZ1bmN0aW9uCisuYWxpZ24JNQorYnNhZXNfY2JjX2VuY3J5cHQ6CisjaWZuZGVmCV9fS0VSTkVMX18KKwljbXAJJGxlbiwgIzEyOAorI2lmbmRlZglfX3RodW1iX18KKwlibG8JQUVTX2NiY19lbmNyeXB0CisjZWxzZQorCWJocwkxZgorCWIJQUVTX2NiY19lbmNyeXB0CisxOgorI2VuZGlmCisjZW5kaWYKKworCUAgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBtYWtlIHN1cmUgd2UgYXJlIGNhbGxlZCB3aXRoIGVuYyA9PSAwCisKKwltb3YJaXAsIHNwCisJc3RtZGIJc3AhLCB7cjQtcjEwLCBscn0KKwlWRlBfQUJJX1BVU0gKKwlsZHIJJGl2cCwgW2lwXQkJCUAgSVYgaXMgMXN0IGFyZyBvbiB0aGUgc3RhY2sKKwltb3YJJGxlbiwgJGxlbiwgbHNyIzQJCUAgbGVuIGluIDE2IGJ5dGUgYmxvY2tzCisJc3ViCXNwLCAjMHgxMAkJCUAgc2NyYXRjaCBzcGFjZSB0byBjYXJyeSBvdmVyIHRoZSBJVgorCW1vdgkkZnAsIHNwCQkJCUAgc2F2ZSBzcAorCisJbGRyCSRyb3VuZHMsIFska2V5LCAjMjQwXQkJQCBnZXQgIyBvZiByb3VuZHMKKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCUAgYWxsb2NhdGUgdGhlIGtleSBzY2hlZHVsZSBvbiB0aGUgc3RhY2sKKwlzdWIJcjEyLCBzcCwgJHJvdW5kcywgbHNsIzcJCUAgMTI4IGJ5dGVzIHBlciBpbm5lciByb3VuZCBrZXkKKwlhZGQJcjEyLCAjYDEyOC0zMmAJCQlAIHNpZnplIG9mIGJpdC1zbGljZXMga2V5IHNjaGVkdWxlCisKKwlAIHBvcHVsYXRlIHRoZSBrZXkgc2NoZWR1bGUKKwltb3YJcjQsICRrZXkJCQlAIHBhc3Mga2V5CisJbW92CXI1LCAkcm91bmRzCQkJQCBwYXNzICMgb2Ygcm91bmRzCisJbW92CXNwLCByMTIJCQkJQCBzcCBpcyAka2V5c2NoZWQKKwlibAlfYnNhZXNfa2V5X2NvbnZlcnQKKwl2bGRtaWEJJGtleXNjaGVkLCB7QFhNTVs2XX0KKwl2c3RtaWEJcjEyLCAge0BYTU1bMTVdfQkJQCBzYXZlIGxhc3Qgcm91bmQga2V5CisJdmVvcglAWE1NWzddLCBAWE1NWzddLCBAWE1NWzZdCUAgZml4IHVwIHJvdW5kIDAga2V5CisJdnN0bWlhCSRrZXlzY2hlZCwge0BYTU1bN119CisjZWxzZQorCWxkcglyMTIsIFska2V5LCAjMjQ0XQorCWVvcnMJcjEyLCAjMQorCWJlcQkwZgorCisJQCBwb3B1bGF0ZSB0aGUga2V5IHNjaGVkdWxlCisJc3RyCXIxMiwgWyRrZXksICMyNDRdCisJbW92CXI0LCAka2V5CQkJQCBwYXNzIGtleQorCW1vdglyNSwgJHJvdW5kcwkJCUAgcGFzcyAjIG9mIHJvdW5kcworCWFkZAlyMTIsICRrZXksICMyNDgJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisJYmwJX2JzYWVzX2tleV9jb252ZXJ0CisJYWRkCXI0LCAka2V5LCAjMjQ4CisJdmxkbWlhCXI0LCB7QFhNTVs2XX0KKwl2c3RtaWEJcjEyLCB7QFhNTVsxNV19CQkJQCBzYXZlIGxhc3Qgcm91bmQga2V5CisJdmVvcglAWE1NWzddLCBAWE1NWzddLCBAWE1NWzZdCUAgZml4IHVwIHJvdW5kIDAga2V5CisJdnN0bWlhCXI0LCB7QFhNTVs3XX0KKworLmFsaWduCTIKKzA6CisjZW5kaWYKKworCXZsZDEuOAl7QFhNTVsxNV19LCBbJGl2cF0JCUAgbG9hZCBJVgorCWIJLkxjYmNfZGVjX2xvb3AKKworLmFsaWduCTQKKy5MY2JjX2RlY19sb29wOgorCXN1YnMJJGxlbiwgJGxlbiwgIzB4OAorCWJtaQkuTGNiY19kZWNfbG9vcF9maW5pc2gKKworCXZsZDEuOAl7QFhNTVswXS1AWE1NWzFdfSwgWyRpbnBdIQlAIGxvYWQgaW5wdXQKKwl2bGQxLjgJe0BYTU1bMl0tQFhNTVszXX0sIFskaW5wXSEKKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCW1vdglyNCwgJGtleXNjaGVkCQkJQCBwYXNzIHRoZSBrZXkKKyNlbHNlCisJYWRkCXI0LCAka2V5LCAjMjQ4CisjZW5kaWYKKwl2bGQxLjgJe0BYTU1bNF0tQFhNTVs1XX0sIFskaW5wXSEKKwltb3YJcjUsICRyb3VuZHMKKwl2bGQxLjgJe0BYTU1bNl0tQFhNTVs3XX0sIFskaW5wXQorCXN1YgkkaW5wLCAkaW5wLCAjMHg2MAorCXZzdG1pYQkkZnAsIHtAWE1NWzE1XX0JCQlAIHB1dCBhc2lkZSBJVgorCisJYmwJX2JzYWVzX2RlY3J5cHQ4CisKKwl2bGRtaWEJJGZwLCB7QFhNTVsxNF19CQkJQCByZWxvYWQgSVYKKwl2bGQxLjgJe0BYTU1bOF0tQFhNTVs5XX0sIFskaW5wXSEJQCByZWxvYWQgaW5wdXQKKwl2ZW9yCUBYTU1bMF0sIEBYTU1bMF0sIEBYTU1bMTRdCUAgXj0gSVYKKwl2bGQxLjgJe0BYTU1bMTBdLUBYTU1bMTFdfSwgWyRpbnBdIQorCXZlb3IJQFhNTVsxXSwgQFhNTVsxXSwgQFhNTVs4XQorCXZlb3IJQFhNTVs2XSwgQFhNTVs2XSwgQFhNTVs5XQorCXZsZDEuOAl7QFhNTVsxMl0tQFhNTVsxM119LCBbJGlucF0hCisJdmVvcglAWE1NWzRdLCBAWE1NWzRdLCBAWE1NWzEwXQorCXZlb3IJQFhNTVsyXSwgQFhNTVsyXSwgQFhNTVsxMV0KKwl2bGQxLjgJe0BYTU1bMTRdLUBYTU1bMTVdfSwgWyRpbnBdIQorCXZlb3IJQFhNTVs3XSwgQFhNTVs3XSwgQFhNTVsxMl0KKwl2c3QxLjgJe0BYTU1bMF0tQFhNTVsxXX0sIFskb3V0XSEJQCB3cml0ZSBvdXRwdXQKKwl2ZW9yCUBYTU1bM10sIEBYTU1bM10sIEBYTU1bMTNdCisJdnN0MS44CXtAWE1NWzZdfSwgWyRvdXRdIQorCXZlb3IJQFhNTVs1XSwgQFhNTVs1XSwgQFhNTVsxNF0KKwl2c3QxLjgJe0BYTU1bNF19LCBbJG91dF0hCisJdnN0MS44CXtAWE1NWzJdfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVs3XX0sIFskb3V0XSEKKwl2c3QxLjgJe0BYTU1bM119LCBbJG91dF0hCisJdnN0MS44CXtAWE1NWzVdfSwgWyRvdXRdIQorCisJYgkuTGNiY19kZWNfbG9vcAorCisuTGNiY19kZWNfbG9vcF9maW5pc2g6CisJYWRkcwkkbGVuLCAkbGVuLCAjOAorCWJlcQkuTGNiY19kZWNfZG9uZQorCisJdmxkMS44CXtAWE1NWzBdfSwgWyRpbnBdIQkJQCBsb2FkIGlucHV0CisJY21wCSRsZW4sICMyCisJYmxvCS5MY2JjX2RlY19vbmUKKwl2bGQxLjgJe0BYTU1bMV19LCBbJGlucF0hCisjaWZuZGVmCUJTQUVTX0FTTV9FWFRFTkRFRF9LRVkKKwltb3YJcjQsICRrZXlzY2hlZAkJCUAgcGFzcyB0aGUga2V5CisjZWxzZQorCWFkZAlyNCwgJGtleSwgIzI0OAorI2VuZGlmCisJbW92CXI1LCAkcm91bmRzCisJdnN0bWlhCSRmcCwge0BYTU1bMTVdfQkJCUAgcHV0IGFzaWRlIElWCisJYmVxCS5MY2JjX2RlY190d28KKwl2bGQxLjgJe0BYTU1bMl19LCBbJGlucF0hCisJY21wCSRsZW4sICM0CisJYmxvCS5MY2JjX2RlY190aHJlZQorCXZsZDEuOAl7QFhNTVszXX0sIFskaW5wXSEKKwliZXEJLkxjYmNfZGVjX2ZvdXIKKwl2bGQxLjgJe0BYTU1bNF19LCBbJGlucF0hCisJY21wCSRsZW4sICM2CisJYmxvCS5MY2JjX2RlY19maXZlCisJdmxkMS44CXtAWE1NWzVdfSwgWyRpbnBdIQorCWJlcQkuTGNiY19kZWNfc2l4CisJdmxkMS44CXtAWE1NWzZdfSwgWyRpbnBdIQorCXN1YgkkaW5wLCAkaW5wLCAjMHg3MAorCisJYmwJX2JzYWVzX2RlY3J5cHQ4CisKKwl2bGRtaWEJJGZwLCB7QFhNTVsxNF19CQkJQCByZWxvYWQgSVYKKwl2bGQxLjgJe0BYTU1bOF0tQFhNTVs5XX0sIFskaW5wXSEJQCByZWxvYWQgaW5wdXQKKwl2ZW9yCUBYTU1bMF0sIEBYTU1bMF0sIEBYTU1bMTRdCUAgXj0gSVYKKwl2bGQxLjgJe0BYTU1bMTBdLUBYTU1bMTFdfSwgWyRpbnBdIQorCXZlb3IJQFhNTVsxXSwgQFhNTVsxXSwgQFhNTVs4XQorCXZlb3IJQFhNTVs2XSwgQFhNTVs2XSwgQFhNTVs5XQorCXZsZDEuOAl7QFhNTVsxMl0tQFhNTVsxM119LCBbJGlucF0hCisJdmVvcglAWE1NWzRdLCBAWE1NWzRdLCBAWE1NWzEwXQorCXZlb3IJQFhNTVsyXSwgQFhNTVsyXSwgQFhNTVsxMV0KKwl2bGQxLjgJe0BYTU1bMTVdfSwgWyRpbnBdIQorCXZlb3IJQFhNTVs3XSwgQFhNTVs3XSwgQFhNTVsxMl0KKwl2c3QxLjgJe0BYTU1bMF0tQFhNTVsxXX0sIFskb3V0XSEJQCB3cml0ZSBvdXRwdXQKKwl2ZW9yCUBYTU1bM10sIEBYTU1bM10sIEBYTU1bMTNdCisJdnN0MS44CXtAWE1NWzZdfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVs0XX0sIFskb3V0XSEKKwl2c3QxLjgJe0BYTU1bMl19LCBbJG91dF0hCisJdnN0MS44CXtAWE1NWzddfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVszXX0sIFskb3V0XSEKKwliCS5MY2JjX2RlY19kb25lCisuYWxpZ24JNAorLkxjYmNfZGVjX3NpeDoKKwlzdWIJJGlucCwgJGlucCwgIzB4NjAKKwlibAlfYnNhZXNfZGVjcnlwdDgKKwl2bGRtaWEJJGZwLHtAWE1NWzE0XX0JCQlAIHJlbG9hZCBJVgorCXZsZDEuOAl7QFhNTVs4XS1AWE1NWzldfSwgWyRpbnBdIQlAIHJlbG9hZCBpbnB1dAorCXZlb3IJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsxNF0JQCBePSBJVgorCXZsZDEuOAl7QFhNTVsxMF0tQFhNTVsxMV19LCBbJGlucF0hCisJdmVvcglAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWzhdCisJdmVvcglAWE1NWzZdLCBAWE1NWzZdLCBAWE1NWzldCisJdmxkMS44CXtAWE1NWzEyXX0sIFskaW5wXSEKKwl2ZW9yCUBYTU1bNF0sIEBYTU1bNF0sIEBYTU1bMTBdCisJdmVvcglAWE1NWzJdLCBAWE1NWzJdLCBAWE1NWzExXQorCXZsZDEuOAl7QFhNTVsxNV19LCBbJGlucF0hCisJdmVvcglAWE1NWzddLCBAWE1NWzddLCBAWE1NWzEyXQorCXZzdDEuOAl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQlAIHdyaXRlIG91dHB1dAorCXZzdDEuOAl7QFhNTVs2XX0sIFskb3V0XSEKKwl2c3QxLjgJe0BYTU1bNF19LCBbJG91dF0hCisJdnN0MS44CXtAWE1NWzJdfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVs3XX0sIFskb3V0XSEKKwliCS5MY2JjX2RlY19kb25lCisuYWxpZ24JNAorLkxjYmNfZGVjX2ZpdmU6CisJc3ViCSRpbnAsICRpbnAsICMweDUwCisJYmwJX2JzYWVzX2RlY3J5cHQ4CisJdmxkbWlhCSRmcCwge0BYTU1bMTRdfQkJCUAgcmVsb2FkIElWCisJdmxkMS44CXtAWE1NWzhdLUBYTU1bOV19LCBbJGlucF0hCUAgcmVsb2FkIGlucHV0CisJdmVvcglAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWzE0XQlAIF49IElWCisJdmxkMS44CXtAWE1NWzEwXS1AWE1NWzExXX0sIFskaW5wXSEKKwl2ZW9yCUBYTU1bMV0sIEBYTU1bMV0sIEBYTU1bOF0KKwl2ZW9yCUBYTU1bNl0sIEBYTU1bNl0sIEBYTU1bOV0KKwl2bGQxLjgJe0BYTU1bMTVdfSwgWyRpbnBdIQorCXZlb3IJQFhNTVs0XSwgQFhNTVs0XSwgQFhNTVsxMF0KKwl2c3QxLjgJe0BYTU1bMF0tQFhNTVsxXX0sIFskb3V0XSEJQCB3cml0ZSBvdXRwdXQKKwl2ZW9yCUBYTU1bMl0sIEBYTU1bMl0sIEBYTU1bMTFdCisJdnN0MS44CXtAWE1NWzZdfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVs0XX0sIFskb3V0XSEKKwl2c3QxLjgJe0BYTU1bMl19LCBbJG91dF0hCisJYgkuTGNiY19kZWNfZG9uZQorLmFsaWduCTQKKy5MY2JjX2RlY19mb3VyOgorCXN1YgkkaW5wLCAkaW5wLCAjMHg0MAorCWJsCV9ic2Flc19kZWNyeXB0OAorCXZsZG1pYQkkZnAsIHtAWE1NWzE0XX0JCQlAIHJlbG9hZCBJVgorCXZsZDEuOAl7QFhNTVs4XS1AWE1NWzldfSwgWyRpbnBdIQlAIHJlbG9hZCBpbnB1dAorCXZlb3IJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsxNF0JQCBePSBJVgorCXZsZDEuOAl7QFhNTVsxMF19LCBbJGlucF0hCisJdmVvcglAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWzhdCisJdmVvcglAWE1NWzZdLCBAWE1NWzZdLCBAWE1NWzldCisJdmxkMS44CXtAWE1NWzE1XX0sIFskaW5wXSEKKwl2ZW9yCUBYTU1bNF0sIEBYTU1bNF0sIEBYTU1bMTBdCisJdnN0MS44CXtAWE1NWzBdLUBYTU1bMV19LCBbJG91dF0hCUAgd3JpdGUgb3V0cHV0CisJdnN0MS44CXtAWE1NWzZdfSwgWyRvdXRdIQorCXZzdDEuOAl7QFhNTVs0XX0sIFskb3V0XSEKKwliCS5MY2JjX2RlY19kb25lCisuYWxpZ24JNAorLkxjYmNfZGVjX3RocmVlOgorCXN1YgkkaW5wLCAkaW5wLCAjMHgzMAorCWJsCV9ic2Flc19kZWNyeXB0OAorCXZsZG1pYQkkZnAsIHtAWE1NWzE0XX0JCQlAIHJlbG9hZCBJVgorCXZsZDEuOAl7QFhNTVs4XS1AWE1NWzldfSwgWyRpbnBdIQlAIHJlbG9hZCBpbnB1dAorCXZlb3IJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsxNF0JQCBePSBJVgorCXZsZDEuOAl7QFhNTVsxNV19LCBbJGlucF0hCisJdmVvcglAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWzhdCisJdmVvcglAWE1NWzZdLCBAWE1NWzZdLCBAWE1NWzldCisJdnN0MS44CXtAWE1NWzBdLUBYTU1bMV19LCBbJG91dF0hCUAgd3JpdGUgb3V0cHV0CisJdnN0MS44CXtAWE1NWzZdfSwgWyRvdXRdIQorCWIJLkxjYmNfZGVjX2RvbmUKKy5hbGlnbgk0CisuTGNiY19kZWNfdHdvOgorCXN1YgkkaW5wLCAkaW5wLCAjMHgyMAorCWJsCV9ic2Flc19kZWNyeXB0OAorCXZsZG1pYQkkZnAsIHtAWE1NWzE0XX0JCQlAIHJlbG9hZCBJVgorCXZsZDEuOAl7QFhNTVs4XX0sIFskaW5wXSEJCUAgcmVsb2FkIGlucHV0CisJdmVvcglAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWzE0XQlAIF49IElWCisJdmxkMS44CXtAWE1NWzE1XX0sIFskaW5wXSEJCUAgcmVsb2FkIGlucHV0CisJdmVvcglAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWzhdCisJdnN0MS44CXtAWE1NWzBdLUBYTU1bMV19LCBbJG91dF0hCUAgd3JpdGUgb3V0cHV0CisJYgkuTGNiY19kZWNfZG9uZQorLmFsaWduCTQKKy5MY2JjX2RlY19vbmU6CisJc3ViCSRpbnAsICRpbnAsICMweDEwCisJbW92CSRyb3VuZHMsICRvdXQJCQlAIHNhdmUgb3JpZ2luYWwgb3V0IHBvaW50ZXIKKwltb3YJJG91dCwgJGZwCQkJQCB1c2UgdGhlIGl2IHNjcmF0Y2ggc3BhY2UgYXMgb3V0IGJ1ZmZlcgorCW1vdglyMiwgJGtleQorCXZtb3YJQFhNTVs0XSxAWE1NWzE1XQkJQCBqdXN0IGluIGNhc2UgZW5zdXJlIHRoYXQgSVYKKwl2bW92CUBYTU1bNV0sQFhNTVswXQkJCUAgYW5kIGlucHV0IGFyZSBwcmVzZXJ2ZWQKKwlibAlBRVNfZGVjcnlwdAorCXZsZDEuOAl7QFhNTVswXX0sIFskZnAsOjY0XQkJQCBsb2FkIHJlc3VsdAorCXZlb3IJQFhNTVswXSwgQFhNTVswXSwgQFhNTVs0XQlAIF49IElWCisJdm1vdglAWE1NWzE1XSwgQFhNTVs1XQkJQCBAWE1NWzVdIGhvbGRzIGlucHV0CisJdnN0MS44CXtAWE1NWzBdfSwgWyRyb3VuZHNdCQlAIHdyaXRlIG91dHB1dAorCisuTGNiY19kZWNfZG9uZToKKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCXZtb3YuaTMyCXEwLCAjMAorCXZtb3YuaTMyCXExLCAjMAorLkxjYmNfZGVjX2J6ZXJvOgkJCQlAIHdpcGUga2V5IHNjaGVkdWxlIFtpZiBhbnldCisJdnN0bWlhCQkka2V5c2NoZWQhLCB7cTAtcTF9CisJY21wCQkka2V5c2NoZWQsICRmcAorCWJuZQkJLkxjYmNfZGVjX2J6ZXJvCisjZW5kaWYKKworCW1vdglzcCwgJGZwCisJYWRkCXNwLCAjMHgxMAkJCUAgYWRkIHNwLCRmcCwjMHgxMCBpcyBubyBnb29kIGZvciB0aHVtYgorCXZzdDEuOAl7QFhNTVsxNV19LCBbJGl2cF0JCUAgcmV0dXJuIElWCisJVkZQX0FCSV9QT1AKKwlsZG1pYQlzcCEsIHtyNC1yMTAsIHBjfQorLnNpemUJYnNhZXNfY2JjX2VuY3J5cHQsLi1ic2Flc19jYmNfZW5jcnlwdAorX19fCit9Cit7CitteSAoJGlucCwkb3V0LCRsZW4sJGtleSwgJGN0ciwkZnAsJHJvdW5kcyk9KG1hcCgiciRfIiwoMC4uMyw4Li4xMCkpKTsKK215ICRjb25zdCA9ICJyNiI7CSMgc2hhcmVkIHdpdGggX2JzYWVzX2VuY3J5cHQ4X2FsdAorbXkgJGtleXNjaGVkID0gInNwIjsKKworJGNvZGUuPTw8X19fOworLmV4dGVybglBRVNfZW5jcnlwdAorLmdsb2JhbAlic2Flc19jdHIzMl9lbmNyeXB0X2Jsb2NrcworLnR5cGUJYnNhZXNfY3RyMzJfZW5jcnlwdF9ibG9ja3MsJWZ1bmN0aW9uCisuYWxpZ24JNQorYnNhZXNfY3RyMzJfZW5jcnlwdF9ibG9ja3M6CisJY21wCSRsZW4sICM4CQkJQCB1c2UgcGxhaW4gQUVTIGZvcgorCWJsbwkuTGN0cl9lbmNfc2hvcnQJCQlAIHNtYWxsIHNpemVzCisKKwltb3YJaXAsIHNwCisJc3RtZGIJc3AhLCB7cjQtcjEwLCBscn0KKwlWRlBfQUJJX1BVU0gKKwlsZHIJJGN0ciwgW2lwXQkJCUAgY3RyIGlzIDFzdCBhcmcgb24gdGhlIHN0YWNrCisJc3ViCXNwLCBzcCwgIzB4MTAJCQlAIHNjcmF0Y2ggc3BhY2UgdG8gY2Fycnkgb3ZlciB0aGUgY3RyCisJbW92CSRmcCwgc3AJCQkJQCBzYXZlIHNwCisKKwlsZHIJJHJvdW5kcywgWyRrZXksICMyNDBdCQlAIGdldCAjIG9mIHJvdW5kcworI2lmbmRlZglCU0FFU19BU01fRVhURU5ERURfS0VZCisJQCBhbGxvY2F0ZSB0aGUga2V5IHNjaGVkdWxlIG9uIHRoZSBzdGFjaworCXN1YglyMTIsIHNwLCAkcm91bmRzLCBsc2wjNwkJQCAxMjggYnl0ZXMgcGVyIGlubmVyIHJvdW5kIGtleQorCWFkZAlyMTIsICNgMTI4LTMyYAkJCUAgc2l6ZSBvZiBiaXQtc2xpY2VkIGtleSBzY2hlZHVsZQorCisJQCBwb3B1bGF0ZSB0aGUga2V5IHNjaGVkdWxlCisJbW92CXI0LCAka2V5CQkJQCBwYXNzIGtleQorCW1vdglyNSwgJHJvdW5kcwkJCUAgcGFzcyAjIG9mIHJvdW5kcworCW1vdglzcCwgcjEyCQkJCUAgc3AgaXMgJGtleXNjaGVkCisJYmwJX2JzYWVzX2tleV9jb252ZXJ0CisJdmVvcglAWE1NWzddLEBYTU1bN10sQFhNTVsxNV0JQCBmaXggdXAgbGFzdCByb3VuZCBrZXkKKwl2c3RtaWEJcjEyLCB7QFhNTVs3XX0JCQlAIHNhdmUgbGFzdCByb3VuZCBrZXkKKworCXZsZDEuOAl7QFhNTVswXX0sIFskY3RyXQkJQCBsb2FkIGNvdW50ZXIKKwlhZGQJJGN0ciwgJGNvbnN0LCAjLkxSRVZNMFNSLS5MTTAJQCBib3Jyb3cgJGN0cgorCXZsZG1pYQkka2V5c2NoZWQsIHtAWE1NWzRdfQkJQCBsb2FkIHJvdW5kMCBrZXkKKyNlbHNlCisJbGRyCXIxMiwgWyRrZXksICMyNDRdCisJZW9ycwlyMTIsICMxCisJYmVxCTBmCisKKwlAIHBvcHVsYXRlIHRoZSBrZXkgc2NoZWR1bGUKKwlzdHIJcjEyLCBbJGtleSwgIzI0NF0KKwltb3YJcjQsICRrZXkJCQlAIHBhc3Mga2V5CisJbW92CXI1LCAkcm91bmRzCQkJQCBwYXNzICMgb2Ygcm91bmRzCisJYWRkCXIxMiwgJGtleSwgIzI0OAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKwlibAlfYnNhZXNfa2V5X2NvbnZlcnQKKwl2ZW9yCUBYTU1bN10sQFhNTVs3XSxAWE1NWzE1XQlAIGZpeCB1cCBsYXN0IHJvdW5kIGtleQorCXZzdG1pYQlyMTIsIHtAWE1NWzddfQkJCUAgc2F2ZSBsYXN0IHJvdW5kIGtleQorCisuYWxpZ24JMgorMDoJYWRkCXIxMiwgJGtleSwgIzI0OAorCXZsZDEuOAl7QFhNTVswXX0sIFskY3RyXQkJQCBsb2FkIGNvdW50ZXIKKwlhZHJsCSRjdHIsIC5MUkVWTTBTUgkJCUAgYm9ycm93ICRjdHIKKwl2bGRtaWEJcjEyLCB7QFhNTVs0XX0JCQlAIGxvYWQgcm91bmQwIGtleQorCXN1YglzcCwgIzB4MTAJCQlAIHBsYWNlIGZvciBhZGp1c3RlZCByb3VuZDAga2V5CisjZW5kaWYKKworCXZtb3YuaTMyCUBYTU1bOF0sIzEJCUAgY29tcG9zZSAxPDw5NgorCXZlb3IJCUBYTU1bOV0sQFhNTVs5XSxAWE1NWzldCisJdnJldjMyLjgJQFhNTVswXSxAWE1NWzBdCisJdmV4dC44CQlAWE1NWzhdLEBYTU1bOV0sQFhNTVs4XSwjNAorCXZyZXYzMi44CUBYTU1bNF0sQFhNTVs0XQorCXZhZGQudTMyCUBYTU1bOV0sQFhNTVs4XSxAWE1NWzhdCUAgY29tcG9zZSAyPDw5NgorCXZzdG1pYQkka2V5c2NoZWQsIHtAWE1NWzRdfQkJQCBzYXZlIGFkanVzdGVkIHJvdW5kMCBrZXkKKwliCS5MY3RyX2VuY19sb29wCisKKy5hbGlnbgk0CisuTGN0cl9lbmNfbG9vcDoKKwl2YWRkLnUzMglAWE1NWzEwXSwgQFhNTVs4XSwgQFhNTVs5XQlAIGNvbXBvc2UgMzw8OTYKKwl2YWRkLnUzMglAWE1NWzFdLCBAWE1NWzBdLCBAWE1NWzhdCUAgKzEKKwl2YWRkLnUzMglAWE1NWzJdLCBAWE1NWzBdLCBAWE1NWzldCUAgKzIKKwl2YWRkLnUzMglAWE1NWzNdLCBAWE1NWzBdLCBAWE1NWzEwXQlAICszCisJdmFkZC51MzIJQFhNTVs0XSwgQFhNTVsxXSwgQFhNTVsxMF0KKwl2YWRkLnUzMglAWE1NWzVdLCBAWE1NWzJdLCBAWE1NWzEwXQorCXZhZGQudTMyCUBYTU1bNl0sIEBYTU1bM10sIEBYTU1bMTBdCisJdmFkZC51MzIJQFhNTVs3XSwgQFhNTVs0XSwgQFhNTVsxMF0KKwl2YWRkLnUzMglAWE1NWzEwXSwgQFhNTVs1XSwgQFhNTVsxMF0JQCBuZXh0IGNvdW50ZXIKKworCUAgQm9ycm93IHByb2xvZ3VlIGZyb20gX2JzYWVzX2VuY3J5cHQ4IHRvIHVzZSB0aGUgb3Bwb3J0dW5pdHkKKwlAIHRvIGZsaXAgYnl0ZSBvcmRlciBpbiAzMi1iaXQgY291bnRlcgorCisJdmxkbWlhCQkka2V5c2NoZWQsIHtAWE1NWzldfQkJQCBsb2FkIHJvdW5kMCBrZXkKKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCWFkZAkJcjQsICRrZXlzY2hlZCwgIzB4MTAJCUAgcGFzcyBuZXh0IHJvdW5kIGtleQorI2Vsc2UKKwlhZGQJCXI0LCAka2V5LCAjYDI0OCsxNmAKKyNlbmRpZgorCXZsZG1pYQkJJGN0ciwge0BYTU1bOF19CQkJQCAuTFJFVk0wU1IKKwltb3YJCXI1LCAkcm91bmRzCQkJQCBwYXNzIHJvdW5kcworCXZzdG1pYQkJJGZwLCB7QFhNTVsxMF19CQkJQCBzYXZlIG5leHQgY291bnRlcgorCXN1YgkJJGNvbnN0LCAkY3RyLCAjLkxSRVZNMFNSLS5MU1IJQCBwYXNzIGNvbnN0YW50cworCisJYmwJCV9ic2Flc19lbmNyeXB0OF9hbHQKKworCXN1YnMJCSRsZW4sICRsZW4sICM4CisJYmxvCQkuTGN0cl9lbmNfbG9vcF9kb25lCisKKwl2bGQxLjgJCXtAWE1NWzhdLUBYTU1bOV19LCBbJGlucF0hCUAgbG9hZCBpbnB1dAorCXZsZDEuOAkJe0BYTU1bMTBdLUBYTU1bMTFdfSwgWyRpbnBdIQorCXZlb3IJCUBYTU1bMF0sIEBYTU1bOF0KKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzldCisJdmxkMS44CQl7QFhNTVsxMl0tQFhNTVsxM119LCBbJGlucF0hCisJdmVvcgkJQFhNTVs0XSwgQFhNTVsxMF0KKwl2ZW9yCQlAWE1NWzZdLCBAWE1NWzExXQorCXZsZDEuOAkJe0BYTU1bMTRdLUBYTU1bMTVdfSwgWyRpbnBdIQorCXZlb3IJCUBYTU1bM10sIEBYTU1bMTJdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQlAIHdyaXRlIG91dHB1dAorCXZlb3IJCUBYTU1bN10sIEBYTU1bMTNdCisJdmVvcgkJQFhNTVsyXSwgQFhNTVsxNF0KKwl2c3QxLjgJCXtAWE1NWzRdfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bNV0sIEBYTU1bMTVdCisJdnN0MS44CQl7QFhNTVs2XX0sIFskb3V0XSEKKwl2bW92LmkzMglAWE1NWzhdLCAjMQkJCUAgY29tcG9zZSAxPDw5NgorCXZzdDEuOAkJe0BYTU1bM119LCBbJG91dF0hCisJdmVvcgkJQFhNTVs5XSwgQFhNTVs5XSwgQFhNTVs5XQorCXZzdDEuOAkJe0BYTU1bN119LCBbJG91dF0hCisJdmV4dC44CQlAWE1NWzhdLCBAWE1NWzldLCBAWE1NWzhdLCAjNAorCXZzdDEuOAkJe0BYTU1bMl19LCBbJG91dF0hCisJdmFkZC51MzIJQFhNTVs5XSxAWE1NWzhdLEBYTU1bOF0JCUAgY29tcG9zZSAyPDw5NgorCXZzdDEuOAkJe0BYTU1bNV19LCBbJG91dF0hCisJdmxkbWlhCQkkZnAsIHtAWE1NWzBdfQkJCUAgbG9hZCBjb3VudGVyCisKKwlibmUJCS5MY3RyX2VuY19sb29wCisJYgkJLkxjdHJfZW5jX2RvbmUKKworLmFsaWduCTQKKy5MY3RyX2VuY19sb29wX2RvbmU6CisJYWRkCQkkbGVuLCAkbGVuLCAjOAorCXZsZDEuOAkJe0BYTU1bOF19LCBbJGlucF0hCUAgbG9hZCBpbnB1dAorCXZlb3IJCUBYTU1bMF0sIEBYTU1bOF0KKwl2c3QxLjgJCXtAWE1NWzBdfSwgWyRvdXRdIQlAIHdyaXRlIG91dHB1dAorCWNtcAkJJGxlbiwgIzIKKwlibG8JCS5MY3RyX2VuY19kb25lCisJdmxkMS44CQl7QFhNTVs5XX0sIFskaW5wXSEKKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzldCisJdnN0MS44CQl7QFhNTVsxXX0sIFskb3V0XSEKKwliZXEJCS5MY3RyX2VuY19kb25lCisJdmxkMS44CQl7QFhNTVsxMF19LCBbJGlucF0hCisJdmVvcgkJQFhNTVs0XSwgQFhNTVsxMF0KKwl2c3QxLjgJCXtAWE1NWzRdfSwgWyRvdXRdIQorCWNtcAkJJGxlbiwgIzQKKwlibG8JCS5MY3RyX2VuY19kb25lCisJdmxkMS44CQl7QFhNTVsxMV19LCBbJGlucF0hCisJdmVvcgkJQFhNTVs2XSwgQFhNTVsxMV0KKwl2c3QxLjgJCXtAWE1NWzZdfSwgWyRvdXRdIQorCWJlcQkJLkxjdHJfZW5jX2RvbmUKKwl2bGQxLjgJCXtAWE1NWzEyXX0sIFskaW5wXSEKKwl2ZW9yCQlAWE1NWzNdLCBAWE1NWzEyXQorCXZzdDEuOAkJe0BYTU1bM119LCBbJG91dF0hCisJY21wCQkkbGVuLCAjNgorCWJsbwkJLkxjdHJfZW5jX2RvbmUKKwl2bGQxLjgJCXtAWE1NWzEzXX0sIFskaW5wXSEKKwl2ZW9yCQlAWE1NWzddLCBAWE1NWzEzXQorCXZzdDEuOAkJe0BYTU1bN119LCBbJG91dF0hCisJYmVxCQkuTGN0cl9lbmNfZG9uZQorCXZsZDEuOAkJe0BYTU1bMTRdfSwgWyRpbnBdCisJdmVvcgkJQFhNTVsyXSwgQFhNTVsxNF0KKwl2c3QxLjgJCXtAWE1NWzJdfSwgWyRvdXRdIQorCisuTGN0cl9lbmNfZG9uZToKKwl2bW92LmkzMglxMCwgIzAKKwl2bW92LmkzMglxMSwgIzAKKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorLkxjdHJfZW5jX2J6ZXJvOgkJCUAgd2lwZSBrZXkgc2NoZWR1bGUgW2lmIGFueV0KKwl2c3RtaWEJCSRrZXlzY2hlZCEsIHtxMC1xMX0KKwljbXAJCSRrZXlzY2hlZCwgJGZwCisJYm5lCQkuTGN0cl9lbmNfYnplcm8KKyNlbHNlCisJdnN0bWlhCQkka2V5c2NoZWQsIHtxMC1xMX0KKyNlbmRpZgorCisJbW92CXNwLCAkZnAKKwlhZGQJc3AsICMweDEwCQlAIGFkZCBzcCwkZnAsIzB4MTAgaXMgbm8gZ29vZCBmb3IgdGh1bWIKKwlWRlBfQUJJX1BPUAorCWxkbWlhCXNwISwge3I0LXIxMCwgcGN9CUAgcmV0dXJuCisKKy5hbGlnbgk0CisuTGN0cl9lbmNfc2hvcnQ6CisJbGRyCWlwLCBbc3BdCQlAIGN0ciBwb2ludGVyIGlzIHBhc3NlZCBvbiBzdGFjaworCXN0bWRiCXNwISwge3I0LXI4LCBscn0KKworCW1vdglyNCwgJGlucAkJQCBjb3B5IGFyZ3VtZW50cworCW1vdglyNSwgJG91dAorCW1vdglyNiwgJGxlbgorCW1vdglyNywgJGtleQorCWxkcglyOCwgW2lwLCAjMTJdCQlAIGxvYWQgY291bnRlciBMU1cKKwl2bGQxLjgJe0BYTU1bMV19LCBbaXBdCQlAIGxvYWQgd2hvbGUgY291bnRlciB2YWx1ZQorI2lmZGVmIF9fQVJNRUxfXworCXJldglyOCwgcjgKKyNlbmRpZgorCXN1YglzcCwgc3AsICMweDEwCisJdnN0MS44CXtAWE1NWzFdfSwgW3NwLDo2NF0JQCBjb3B5IGNvdW50ZXIgdmFsdWUKKwlzdWIJc3AsIHNwLCAjMHgxMAorCisuTGN0cl9lbmNfc2hvcnRfbG9vcDoKKwlhZGQJcjAsIHNwLCAjMHgxMAkJQCBpbnB1dCBjb3VudGVyIHZhbHVlCisJbW92CXIxLCBzcAkJCUAgb3V0cHV0IG9uIHRoZSBzdGFjaworCW1vdglyMiwgcjcJCQlAIGtleQorCisJYmwJQUVTX2VuY3J5cHQKKworCXZsZDEuOAl7QFhNTVswXX0sIFtyNF0hCUAgbG9hZCBpbnB1dAorCXZsZDEuOAl7QFhNTVsxXX0sIFtzcCw6NjRdCUAgbG9hZCBlbmNyeXB0ZWQgY291bnRlcgorCWFkZAlyOCwgcjgsICMxCisjaWZkZWYgX19BUk1FTF9fCisJcmV2CXIwLCByOAorCXN0cglyMCwgW3NwLCAjMHgxY10JCUAgbmV4dCBjb3VudGVyIHZhbHVlCisjZWxzZQorCXN0cglyOCwgW3NwLCAjMHgxY10JCUAgbmV4dCBjb3VudGVyIHZhbHVlCisjZW5kaWYKKwl2ZW9yCUBYTU1bMF0sQFhNTVswXSxAWE1NWzFdCisJdnN0MS44CXtAWE1NWzBdfSwgW3I1XSEJQCBzdG9yZSBvdXRwdXQKKwlzdWJzCXI2LCByNiwgIzEKKwlibmUJLkxjdHJfZW5jX3Nob3J0X2xvb3AKKworCXZtb3YuaTMyCXEwLCAjMAorCXZtb3YuaTMyCXExLCAjMAorCXZzdG1pYQkJc3AhLCB7cTAtcTF9CisKKwlsZG1pYQlzcCEsIHtyNC1yOCwgcGN9Cisuc2l6ZQlic2Flc19jdHIzMl9lbmNyeXB0X2Jsb2NrcywuLWJzYWVzX2N0cjMyX2VuY3J5cHRfYmxvY2tzCitfX18KK30KK3sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBic2Flc194dHNfW2VufGRlXWNyeXB0KGNvbnN0IGNoYXIgKmlucCxjaGFyICpvdXQsc2l6ZV90IGxlbiwKKyMJY29uc3QgQUVTX0tFWSAqa2V5MSwgY29uc3QgQUVTX0tFWSAqa2V5MiwKKyMJY29uc3QgdW5zaWduZWQgY2hhciBpdlsxNl0pOworIworbXkgKCRpbnAsJG91dCwkbGVuLCRrZXksJHJvdW5kcywkbWFnaWMsJGZwKT0obWFwKCJyJF8iLCg3Li4xMCwxLi4zKSkpOworbXkgJGNvbnN0PSJyNiI7CQkjIHJldHVybmVkIGJ5IF9ic2Flc19rZXlfY29udmVydAorbXkgJHR3bWFzaz1AWE1NWzVdOworbXkgQFQ9QFhNTVs2Li43XTsKKworJGNvZGUuPTw8X19fOworLmdsb2JsCWJzYWVzX3h0c19lbmNyeXB0CisudHlwZQlic2Flc194dHNfZW5jcnlwdCwlZnVuY3Rpb24KKy5hbGlnbgk0Citic2Flc194dHNfZW5jcnlwdDoKKwltb3YJaXAsIHNwCisJc3RtZGIJc3AhLCB7cjQtcjEwLCBscn0JCUAgMHgyMAorCVZGUF9BQklfUFVTSAorCW1vdglyNiwgc3AJCQkJQCBmdXR1cmUgJGZwCisKKwltb3YJJGlucCwgcjAKKwltb3YJJG91dCwgcjEKKwltb3YJJGxlbiwgcjIKKwltb3YJJGtleSwgcjMKKworCXN1YglyMCwgc3AsICMweDEwCQkJQCAweDEwCisJYmljCXIwLCAjMHhmCQkJQCBhbGlnbiBhdCAxNiBieXRlcworCW1vdglzcCwgcjAKKworI2lmZGVmCVhUU19DSEFJTl9UV0VBSworCWxkcglyMCwgW2lwXQkJCUAgcG9pbnRlciB0byBpbnB1dCB0d2VhaworI2Vsc2UKKwlAIGdlbmVyYXRlIGluaXRpYWwgdHdlYWsKKwlsZHIJcjAsIFtpcCwgIzRdCQkJQCBpdltdCisJbW92CXIxLCBzcAorCWxkcglyMiwgW2lwLCAjMF0JCQlAIGtleTIKKwlibAlBRVNfZW5jcnlwdAorCW1vdglyMCxzcAkJCQlAIHBvaW50ZXIgdG8gaW5pdGlhbCB0d2VhaworI2VuZGlmCisKKwlsZHIJJHJvdW5kcywgWyRrZXksICMyNDBdCQlAIGdldCAjIG9mIHJvdW5kcworCW1vdgkkZnAsIHI2CisjaWZuZGVmCUJTQUVTX0FTTV9FWFRFTkRFRF9LRVkKKwlAIGFsbG9jYXRlIHRoZSBrZXkgc2NoZWR1bGUgb24gdGhlIHN0YWNrCisJc3ViCXIxMiwgc3AsICRyb3VuZHMsIGxzbCM3CQlAIDEyOCBieXRlcyBwZXIgaW5uZXIgcm91bmQga2V5CisJQCBhZGQJcjEyLCAjYDEyOC0zMmAJCQlAIHNpemUgb2YgYml0LXNsaWNlZCBrZXkgc2NoZWR1bGUKKwlzdWIJcjEyLCAjYDMyKzE2YAkJCUAgcGxhY2UgZm9yIHR3ZWFrWzldCisKKwlAIHBvcHVsYXRlIHRoZSBrZXkgc2NoZWR1bGUKKwltb3YJcjQsICRrZXkJCQlAIHBhc3Mga2V5CisJbW92CXI1LCAkcm91bmRzCQkJQCBwYXNzICMgb2Ygcm91bmRzCisJbW92CXNwLCByMTIKKwlhZGQJcjEyLCAjMHg5MAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKwlibAlfYnNhZXNfa2V5X2NvbnZlcnQKKwl2ZW9yCUBYTU1bN10sIEBYTU1bN10sIEBYTU1bMTVdCUAgZml4IHVwIGxhc3Qgcm91bmQga2V5CisJdnN0bWlhCXIxMiwge0BYTU1bN119CQkJQCBzYXZlIGxhc3Qgcm91bmQga2V5CisjZWxzZQorCWxkcglyMTIsIFska2V5LCAjMjQ0XQorCWVvcnMJcjEyLCAjMQorCWJlcQkwZgorCisJc3RyCXIxMiwgWyRrZXksICMyNDRdCisJbW92CXI0LCAka2V5CQkJQCBwYXNzIGtleQorCW1vdglyNSwgJHJvdW5kcwkJCUAgcGFzcyAjIG9mIHJvdW5kcworCWFkZAlyMTIsICRrZXksICMyNDgJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisJYmwJX2JzYWVzX2tleV9jb252ZXJ0CisJdmVvcglAWE1NWzddLCBAWE1NWzddLCBAWE1NWzE1XQlAIGZpeCB1cCBsYXN0IHJvdW5kIGtleQorCXZzdG1pYQlyMTIsIHtAWE1NWzddfQorCisuYWxpZ24JMgorMDoJc3ViCXNwLCAjMHg5MAkJCUAgcGxhY2UgZm9yIHR3ZWFrWzldCisjZW5kaWYKKworCXZsZDEuOAl7QFhNTVs4XX0sIFtyMF0JCQlAIGluaXRpYWwgdHdlYWsKKwlhZHIJJG1hZ2ljLCAuTHh0c19tYWdpYworCisJc3VicwkkbGVuLCAjMHg4MAorCWJsbwkuTHh0c19lbmNfc2hvcnQKKwliCS5MeHRzX2VuY19sb29wCisKKy5hbGlnbgk0CisuTHh0c19lbmNfbG9vcDoKKwl2bGRtaWEJCSRtYWdpYywgeyR0d21hc2t9CUAgbG9hZCBYVFMgbWFnaWMKKwl2c2hyLnM2NAlAVFswXSwgQFhNTVs4XSwgIzYzCisJbW92CQlyMCwgc3AKKwl2YW5kCQlAVFswXSwgQFRbMF0sICR0d21hc2sKK19fXworZm9yKCRpPTk7JGk8MTY7JGkrKykgeworJGNvZGUuPTw8X19fOworCXZhZGQudTY0CUBYTU1bJGldLCBAWE1NWyRpLTFdLCBAWE1NWyRpLTFdCisJdnN0MS42NAkJe0BYTU1bJGktMV19LCBbcjAsOjEyOF0hCisJdnN3cAkJYCZEaGkoIkBUWzBdIilgLGAmRGxvKCJAVFswXSIpYAorCXZzaHIuczY0CUBUWzFdLCBAWE1NWyRpXSwgIzYzCisJdmVvcgkJQFhNTVskaV0sIEBYTU1bJGldLCBAVFswXQorCXZhbmQJCUBUWzFdLCBAVFsxXSwgJHR3bWFzaworX19fCisJQFQ9cmV2ZXJzZShAVCk7CisKKyRjb2RlLj08PF9fXyBpZiAoJGk+PTEwKTsKKwl2bGQxLjgJCXtAWE1NWyRpLTEwXX0sIFskaW5wXSEKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT49MTEpOworCXZlb3IJCUBYTU1bJGktMTFdLCBAWE1NWyRpLTExXSwgQFhNTVskaS0zXQorX19fCit9CiskY29kZS49PDxfX187CisJdmFkZC51NjQJQFhNTVs4XSwgQFhNTVsxNV0sIEBYTU1bMTVdCisJdnN0MS42NAkJe0BYTU1bMTVdfSwgW3IwLDoxMjhdIQorCXZzd3AJCWAmRGhpKCJAVFswXSIpYCxgJkRsbygiQFRbMF0iKWAKKwl2ZW9yCQlAWE1NWzhdLCBAWE1NWzhdLCBAVFswXQorCXZzdDEuNjQJCXtAWE1NWzhdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKworCXZsZDEuOAkJe0BYTU1bNl0tQFhNTVs3XX0sIFskaW5wXSEKKwl2ZW9yCQlAWE1NWzVdLCBAWE1NWzVdLCBAWE1NWzEzXQorI2lmbmRlZglCU0FFU19BU01fRVhURU5ERURfS0VZCisJYWRkCQlyNCwgc3AsICMweDkwCQkJQCBwYXNzIGtleSBzY2hlZHVsZQorI2Vsc2UKKwlhZGQJCXI0LCAka2V5LCAjMjQ4CQkJQCBwYXNzIGtleSBzY2hlZHVsZQorI2VuZGlmCisJdmVvcgkJQFhNTVs2XSwgQFhNTVs2XSwgQFhNTVsxNF0KKwltb3YJCXI1LCAkcm91bmRzCQkJQCBwYXNzIHJvdW5kcworCXZlb3IJCUBYTU1bN10sIEBYTU1bN10sIEBYTU1bMTVdCisJbW92CQlyMCwgc3AKKworCWJsCQlfYnNhZXNfZW5jcnlwdDgKKworCXZsZDEuNjQJCXtAWE1NWyA4XS1AWE1NWyA5XX0sIFtyMCw6MTI4XSEKKwl2bGQxLjY0CQl7QFhNTVsxMF0tQFhNTVsxMV19LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsgOF0KKwl2bGQxLjY0CQl7QFhNTVsxMl0tQFhNTVsxM119LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVsxXSwgQFhNTVsxXSwgQFhNTVsgOV0KKwl2ZW9yCQlAWE1NWzhdLCBAWE1NWzRdLCBAWE1NWzEwXQorCXZzdDEuOAkJe0BYTU1bMF0tQFhNTVsxXX0sIFskb3V0XSEKKwl2ZW9yCQlAWE1NWzldLCBAWE1NWzZdLCBAWE1NWzExXQorCXZsZDEuNjQJCXtAWE1NWzE0XS1AWE1NWzE1XX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzEwXSwgQFhNTVszXSwgQFhNTVsxMl0KKwl2c3QxLjgJCXtAWE1NWzhdLUBYTU1bOV19LCBbJG91dF0hCisJdmVvcgkJQFhNTVsxMV0sIEBYTU1bN10sIEBYTU1bMTNdCisJdmVvcgkJQFhNTVsxMl0sIEBYTU1bMl0sIEBYTU1bMTRdCisJdnN0MS44CQl7QFhNTVsxMF0tQFhNTVsxMV19LCBbJG91dF0hCisJdmVvcgkJQFhNTVsxM10sIEBYTU1bNV0sIEBYTU1bMTVdCisJdnN0MS44CQl7QFhNTVsxMl0tQFhNTVsxM119LCBbJG91dF0hCisKKwl2bGQxLjY0CQl7QFhNTVs4XX0sIFtyMCw6MTI4XQkJQCBuZXh0IHJvdW5kIHR3ZWFrCisKKwlzdWJzCQkkbGVuLCAjMHg4MAorCWJwbAkJLkx4dHNfZW5jX2xvb3AKKworLkx4dHNfZW5jX3Nob3J0OgorCWFkZHMJCSRsZW4sICMweDcwCisJYm1pCQkuTHh0c19lbmNfZG9uZQorCisJdmxkbWlhCQkkbWFnaWMsIHskdHdtYXNrfQlAIGxvYWQgWFRTIG1hZ2ljCisJdnNoci5zNjQJQFRbMF0sIEBYTU1bOF0sICM2MworCW1vdgkJcjAsIHNwCisJdmFuZAkJQFRbMF0sIEBUWzBdLCAkdHdtYXNrCitfX18KK2ZvcigkaT05OyRpPDE2OyRpKyspIHsKKyRjb2RlLj08PF9fXzsKKwl2YWRkLnU2NAlAWE1NWyRpXSwgQFhNTVskaS0xXSwgQFhNTVskaS0xXQorCXZzdDEuNjQJCXtAWE1NWyRpLTFdfSwgW3IwLDoxMjhdIQorCXZzd3AJCWAmRGhpKCJAVFswXSIpYCxgJkRsbygiQFRbMF0iKWAKKwl2c2hyLnM2NAlAVFsxXSwgQFhNTVskaV0sICM2MworCXZlb3IJCUBYTU1bJGldLCBAWE1NWyRpXSwgQFRbMF0KKwl2YW5kCQlAVFsxXSwgQFRbMV0sICR0d21hc2sKK19fXworCUBUPXJldmVyc2UoQFQpOworCiskY29kZS49PDxfX18gaWYgKCRpPj0xMCk7CisJdmxkMS44CQl7QFhNTVskaS0xMF19LCBbJGlucF0hCisJc3VicwkJJGxlbiwgIzB4MTAKKwlibWkJCS5MeHRzX2VuY19gJGktOWAKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT49MTEpOworCXZlb3IJCUBYTU1bJGktMTFdLCBAWE1NWyRpLTExXSwgQFhNTVskaS0zXQorX19fCit9CiskY29kZS49PDxfX187CisJc3ViCQkkbGVuLCAjMHgxMAorCXZzdDEuNjQJCXtAWE1NWzE1XX0sIFtyMCw6MTI4XQkJQCBuZXh0IHJvdW5kIHR3ZWFrCisKKwl2bGQxLjgJCXtAWE1NWzZdfSwgWyRpbnBdIQorCXZlb3IJCUBYTU1bNV0sIEBYTU1bNV0sIEBYTU1bMTNdCisjaWZuZGVmCUJTQUVTX0FTTV9FWFRFTkRFRF9LRVkKKwlhZGQJCXI0LCBzcCwgIzB4OTAJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisjZWxzZQorCWFkZAkJcjQsICRrZXksICMyNDgJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisjZW5kaWYKKwl2ZW9yCQlAWE1NWzZdLCBAWE1NWzZdLCBAWE1NWzE0XQorCW1vdgkJcjUsICRyb3VuZHMJCQlAIHBhc3Mgcm91bmRzCisJbW92CQlyMCwgc3AKKworCWJsCQlfYnNhZXNfZW5jcnlwdDgKKworCXZsZDEuNjQJCXtAWE1NWyA4XS1AWE1NWyA5XX0sIFtyMCw6MTI4XSEKKwl2bGQxLjY0CQl7QFhNTVsxMF0tQFhNTVsxMV19LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsgOF0KKwl2bGQxLjY0CQl7QFhNTVsxMl0tQFhNTVsxM119LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVsxXSwgQFhNTVsxXSwgQFhNTVsgOV0KKwl2ZW9yCQlAWE1NWzhdLCBAWE1NWzRdLCBAWE1NWzEwXQorCXZzdDEuOAkJe0BYTU1bMF0tQFhNTVsxXX0sIFskb3V0XSEKKwl2ZW9yCQlAWE1NWzldLCBAWE1NWzZdLCBAWE1NWzExXQorCXZsZDEuNjQJCXtAWE1NWzE0XX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzEwXSwgQFhNTVszXSwgQFhNTVsxMl0KKwl2c3QxLjgJCXtAWE1NWzhdLUBYTU1bOV19LCBbJG91dF0hCisJdmVvcgkJQFhNTVsxMV0sIEBYTU1bN10sIEBYTU1bMTNdCisJdmVvcgkJQFhNTVsxMl0sIEBYTU1bMl0sIEBYTU1bMTRdCisJdnN0MS44CQl7QFhNTVsxMF0tQFhNTVsxMV19LCBbJG91dF0hCisJdnN0MS44CQl7QFhNTVsxMl19LCBbJG91dF0hCisKKwl2bGQxLjY0CQl7QFhNTVs4XX0sIFtyMCw6MTI4XQkJQCBuZXh0IHJvdW5kIHR3ZWFrCisJYgkJLkx4dHNfZW5jX2RvbmUKKy5hbGlnbgk0CisuTHh0c19lbmNfNjoKKwl2c3QxLjY0CQl7QFhNTVsxNF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCisJdmVvcgkJQFhNTVs0XSwgQFhNTVs0XSwgQFhNTVsxMl0KKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCWFkZAkJcjQsIHNwLCAjMHg5MAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbHNlCisJYWRkCQlyNCwgJGtleSwgIzI0OAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbmRpZgorCXZlb3IJCUBYTU1bNV0sIEBYTU1bNV0sIEBYTU1bMTNdCisJbW92CQlyNSwgJHJvdW5kcwkJCUAgcGFzcyByb3VuZHMKKwltb3YJCXIwLCBzcAorCisJYmwJCV9ic2Flc19lbmNyeXB0OAorCisJdmxkMS42NAkJe0BYTU1bIDhdLUBYTU1bIDldfSwgW3IwLDoxMjhdIQorCXZsZDEuNjQJCXtAWE1NWzEwXS1AWE1NWzExXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWyA4XQorCXZsZDEuNjQJCXtAWE1NWzEyXS1AWE1NWzEzXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNF0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bOV0sIEBYTU1bNl0sIEBYTU1bMTFdCisJdmVvcgkJQFhNTVsxMF0sIEBYTU1bM10sIEBYTU1bMTJdCisJdnN0MS44CQl7QFhNTVs4XS1AWE1NWzldfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bMTFdLCBAWE1NWzddLCBAWE1NWzEzXQorCXZzdDEuOAkJe0BYTU1bMTBdLUBYTU1bMTFdfSwgWyRvdXRdIQorCisJdmxkMS42NAkJe0BYTU1bOF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCWIJCS5MeHRzX2VuY19kb25lCisKK0AgcHV0IHRoaXMgaW4gcmFuZ2UgZm9yIGJvdGggQVJNIGFuZCBUaHVtYiBtb2RlIGFkciBpbnN0cnVjdGlvbnMKKy5hbGlnbgk1CisuTHh0c19tYWdpYzoKKwkucXVhZAkxLCAweDg3CisKKy5hbGlnbgk1CisuTHh0c19lbmNfNToKKwl2c3QxLjY0CQl7QFhNTVsxM119LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCisJdmVvcgkJQFhNTVszXSwgQFhNTVszXSwgQFhNTVsxMV0KKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCWFkZAkJcjQsIHNwLCAjMHg5MAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbHNlCisJYWRkCQlyNCwgJGtleSwgIzI0OAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbmRpZgorCXZlb3IJCUBYTU1bNF0sIEBYTU1bNF0sIEBYTU1bMTJdCisJbW92CQlyNSwgJHJvdW5kcwkJCUAgcGFzcyByb3VuZHMKKwltb3YJCXIwLCBzcAorCisJYmwJCV9ic2Flc19lbmNyeXB0OAorCisJdmxkMS42NAkJe0BYTU1bIDhdLUBYTU1bIDldfSwgW3IwLDoxMjhdIQorCXZsZDEuNjQJCXtAWE1NWzEwXS1AWE1NWzExXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWyA4XQorCXZsZDEuNjQJCXtAWE1NWzEyXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNF0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bOV0sIEBYTU1bNl0sIEBYTU1bMTFdCisJdmVvcgkJQFhNTVsxMF0sIEBYTU1bM10sIEBYTU1bMTJdCisJdnN0MS44CQl7QFhNTVs4XS1AWE1NWzldfSwgWyRvdXRdIQorCXZzdDEuOAkJe0BYTU1bMTBdfSwgWyRvdXRdIQorCisJdmxkMS42NAkJe0BYTU1bOF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCWIJCS5MeHRzX2VuY19kb25lCisuYWxpZ24JNAorLkx4dHNfZW5jXzQ6CisJdnN0MS42NAkJe0BYTU1bMTJdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKworCXZlb3IJCUBYTU1bMl0sIEBYTU1bMl0sIEBYTU1bMTBdCisjaWZuZGVmCUJTQUVTX0FTTV9FWFRFTkRFRF9LRVkKKwlhZGQJCXI0LCBzcCwgIzB4OTAJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisjZWxzZQorCWFkZAkJcjQsICRrZXksICMyNDgJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisjZW5kaWYKKwl2ZW9yCQlAWE1NWzNdLCBAWE1NWzNdLCBAWE1NWzExXQorCW1vdgkJcjUsICRyb3VuZHMJCQlAIHBhc3Mgcm91bmRzCisJbW92CQlyMCwgc3AKKworCWJsCQlfYnNhZXNfZW5jcnlwdDgKKworCXZsZDEuNjQJCXtAWE1NWyA4XS1AWE1NWyA5XX0sIFtyMCw6MTI4XSEKKwl2bGQxLjY0CQl7QFhNTVsxMF0tQFhNTVsxMV19LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsgOF0KKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNF0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bOV0sIEBYTU1bNl0sIEBYTU1bMTFdCisJdnN0MS44CQl7QFhNTVs4XS1AWE1NWzldfSwgWyRvdXRdIQorCisJdmxkMS42NAkJe0BYTU1bOF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCWIJCS5MeHRzX2VuY19kb25lCisuYWxpZ24JNAorLkx4dHNfZW5jXzM6CisJdnN0MS42NAkJe0BYTU1bMTFdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKworCXZlb3IJCUBYTU1bMV0sIEBYTU1bMV0sIEBYTU1bOV0KKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCWFkZAkJcjQsIHNwLCAjMHg5MAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbHNlCisJYWRkCQlyNCwgJGtleSwgIzI0OAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbmRpZgorCXZlb3IJCUBYTU1bMl0sIEBYTU1bMl0sIEBYTU1bMTBdCisJbW92CQlyNSwgJHJvdW5kcwkJCUAgcGFzcyByb3VuZHMKKwltb3YJCXIwLCBzcAorCisJYmwJCV9ic2Flc19lbmNyeXB0OAorCisJdmxkMS42NAkJe0BYTU1bOF0tQFhNTVs5XX0sIFtyMCw6MTI4XSEKKwl2bGQxLjY0CQl7QFhNTVsxMF19LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsgOF0KKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNF0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZzdDEuOAkJe0BYTU1bOF19LCBbJG91dF0hCisKKwl2bGQxLjY0CQl7QFhNTVs4XX0sIFtyMCw6MTI4XQkJQCBuZXh0IHJvdW5kIHR3ZWFrCisJYgkJLkx4dHNfZW5jX2RvbmUKKy5hbGlnbgk0CisuTHh0c19lbmNfMjoKKwl2c3QxLjY0CQl7QFhNTVsxMF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVs4XQorI2lmbmRlZglCU0FFU19BU01fRVhURU5ERURfS0VZCisJYWRkCQlyNCwgc3AsICMweDkwCQkJQCBwYXNzIGtleSBzY2hlZHVsZQorI2Vsc2UKKwlhZGQJCXI0LCAka2V5LCAjMjQ4CQkJQCBwYXNzIGtleSBzY2hlZHVsZQorI2VuZGlmCisJdmVvcgkJQFhNTVsxXSwgQFhNTVsxXSwgQFhNTVs5XQorCW1vdgkJcjUsICRyb3VuZHMJCQlAIHBhc3Mgcm91bmRzCisJbW92CQlyMCwgc3AKKworCWJsCQlfYnNhZXNfZW5jcnlwdDgKKworCXZsZDEuNjQJCXtAWE1NWzhdLUBYTU1bOV19LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsgOF0KKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZzdDEuOAkJe0BYTU1bMF0tQFhNTVsxXX0sIFskb3V0XSEKKworCXZsZDEuNjQJCXtAWE1NWzhdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKwliCQkuTHh0c19lbmNfZG9uZQorLmFsaWduCTQKKy5MeHRzX2VuY18xOgorCW1vdgkJcjAsIHNwCisJdmVvcgkJQFhNTVswXSwgQFhNTVs4XQorCW1vdgkJcjEsIHNwCisJdnN0MS44CQl7QFhNTVswXX0sIFtzcCw6MTI4XQorCW1vdgkJcjIsICRrZXkKKwltb3YJCXI0LCAkZnAJCQkJQCBwcmVzZXJ2ZSBmcAorCisJYmwJCUFFU19lbmNyeXB0CisKKwl2bGQxLjgJCXtAWE1NWzBdfSwgW3NwLDoxMjhdCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVs4XQorCXZzdDEuOAkJe0BYTU1bMF19LCBbJG91dF0hCisJbW92CQkkZnAsIHI0CisKKwl2bW92CQlAWE1NWzhdLCBAWE1NWzldCQlAIG5leHQgcm91bmQgdHdlYWsKKworLkx4dHNfZW5jX2RvbmU6CisjaWZuZGVmCVhUU19DSEFJTl9UV0VBSworCWFkZHMJCSRsZW4sICMweDEwCisJYmVxCQkuTHh0c19lbmNfcmV0CisJc3ViCQlyNiwgJG91dCwgIzB4MTAKKworLkx4dHNfZW5jX3N0ZWFsOgorCWxkcmIJCXIwLCBbJGlucF0sICMxCisJbGRyYgkJcjEsIFskb3V0LCAjLTB4MTBdCisJc3RyYgkJcjAsIFskb3V0LCAjLTB4MTBdCisJc3RyYgkJcjEsIFskb3V0XSwgIzEKKworCXN1YnMJCSRsZW4sICMxCisJYmhpCQkuTHh0c19lbmNfc3RlYWwKKworCXZsZDEuOAkJe0BYTU1bMF19LCBbcjZdCisJbW92CQlyMCwgc3AKKwl2ZW9yCQlAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWzhdCisJbW92CQlyMSwgc3AKKwl2c3QxLjgJCXtAWE1NWzBdfSwgW3NwLDoxMjhdCisJbW92CQlyMiwgJGtleQorCW1vdgkJcjQsICRmcAkJCUAgcHJlc2VydmUgZnAKKworCWJsCQlBRVNfZW5jcnlwdAorCisJdmxkMS44CQl7QFhNTVswXX0sIFtzcCw6MTI4XQorCXZlb3IJCUBYTU1bMF0sIEBYTU1bMF0sIEBYTU1bOF0KKwl2c3QxLjgJCXtAWE1NWzBdfSwgW3I2XQorCW1vdgkJJGZwLCByNAorI2VuZGlmCisKKy5MeHRzX2VuY19yZXQ6CisJYmljCQlyMCwgJGZwLCAjMHhmCisJdm1vdi5pMzIJcTAsICMwCisJdm1vdi5pMzIJcTEsICMwCisjaWZkZWYJWFRTX0NIQUlOX1RXRUFLCisJbGRyCQlyMSwgWyRmcCwgIzB4MjArVkZQX0FCSV9GUkFNRV0JQCBjaGFpbiB0d2VhaworI2VuZGlmCisuTHh0c19lbmNfYnplcm86CQkJCUAgd2lwZSBrZXkgc2NoZWR1bGUgW2lmIGFueV0KKwl2c3RtaWEJCXNwISwge3EwLXExfQorCWNtcAkJc3AsIHIwCisJYm5lCQkuTHh0c19lbmNfYnplcm8KKworCW1vdgkJc3AsICRmcAorI2lmZGVmCVhUU19DSEFJTl9UV0VBSworCXZzdDEuOAkJe0BYTU1bOF19LCBbcjFdCisjZW5kaWYKKwlWRlBfQUJJX1BPUAorCWxkbWlhCQlzcCEsIHtyNC1yMTAsIHBjfQlAIHJldHVybgorCisuc2l6ZQlic2Flc194dHNfZW5jcnlwdCwuLWJzYWVzX3h0c19lbmNyeXB0CisKKy5nbG9ibAlic2Flc194dHNfZGVjcnlwdAorLnR5cGUJYnNhZXNfeHRzX2RlY3J5cHQsJWZ1bmN0aW9uCisuYWxpZ24JNAorYnNhZXNfeHRzX2RlY3J5cHQ6CisJbW92CWlwLCBzcAorCXN0bWRiCXNwISwge3I0LXIxMCwgbHJ9CQlAIDB4MjAKKwlWRlBfQUJJX1BVU0gKKwltb3YJcjYsIHNwCQkJCUAgZnV0dXJlICRmcAorCisJbW92CSRpbnAsIHIwCisJbW92CSRvdXQsIHIxCisJbW92CSRsZW4sIHIyCisJbW92CSRrZXksIHIzCisKKwlzdWIJcjAsIHNwLCAjMHgxMAkJCUAgMHgxMAorCWJpYwlyMCwgIzB4ZgkJCUAgYWxpZ24gYXQgMTYgYnl0ZXMKKwltb3YJc3AsIHIwCisKKyNpZmRlZglYVFNfQ0hBSU5fVFdFQUsKKwlsZHIJcjAsIFtpcF0JCQlAIHBvaW50ZXIgdG8gaW5wdXQgdHdlYWsKKyNlbHNlCisJQCBnZW5lcmF0ZSBpbml0aWFsIHR3ZWFrCisJbGRyCXIwLCBbaXAsICM0XQkJCUAgaXZbXQorCW1vdglyMSwgc3AKKwlsZHIJcjIsIFtpcCwgIzBdCQkJQCBrZXkyCisJYmwJQUVTX2VuY3J5cHQKKwltb3YJcjAsIHNwCQkJCUAgcG9pbnRlciB0byBpbml0aWFsIHR3ZWFrCisjZW5kaWYKKworCWxkcgkkcm91bmRzLCBbJGtleSwgIzI0MF0JCUAgZ2V0ICMgb2Ygcm91bmRzCisJbW92CSRmcCwgcjYKKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCUAgYWxsb2NhdGUgdGhlIGtleSBzY2hlZHVsZSBvbiB0aGUgc3RhY2sKKwlzdWIJcjEyLCBzcCwgJHJvdW5kcywgbHNsIzcJCUAgMTI4IGJ5dGVzIHBlciBpbm5lciByb3VuZCBrZXkKKwlAIGFkZAlyMTIsICNgMTI4LTMyYAkJCUAgc2l6ZSBvZiBiaXQtc2xpY2VkIGtleSBzY2hlZHVsZQorCXN1YglyMTIsICNgMzIrMTZgCQkJQCBwbGFjZSBmb3IgdHdlYWtbOV0KKworCUAgcG9wdWxhdGUgdGhlIGtleSBzY2hlZHVsZQorCW1vdglyNCwgJGtleQkJCUAgcGFzcyBrZXkKKwltb3YJcjUsICRyb3VuZHMJCQlAIHBhc3MgIyBvZiByb3VuZHMKKwltb3YJc3AsIHIxMgorCWFkZAlyMTIsICMweDkwCQkJQCBwYXNzIGtleSBzY2hlZHVsZQorCWJsCV9ic2Flc19rZXlfY29udmVydAorCWFkZAlyNCwgc3AsICMweDkwCisJdmxkbWlhCXI0LCB7QFhNTVs2XX0KKwl2c3RtaWEJcjEyLCAge0BYTU1bMTVdfQkJQCBzYXZlIGxhc3Qgcm91bmQga2V5CisJdmVvcglAWE1NWzddLCBAWE1NWzddLCBAWE1NWzZdCUAgZml4IHVwIHJvdW5kIDAga2V5CisJdnN0bWlhCXI0LCB7QFhNTVs3XX0KKyNlbHNlCisJbGRyCXIxMiwgWyRrZXksICMyNDRdCisJZW9ycwlyMTIsICMxCisJYmVxCTBmCisKKwlzdHIJcjEyLCBbJGtleSwgIzI0NF0KKwltb3YJcjQsICRrZXkJCQlAIHBhc3Mga2V5CisJbW92CXI1LCAkcm91bmRzCQkJQCBwYXNzICMgb2Ygcm91bmRzCisJYWRkCXIxMiwgJGtleSwgIzI0OAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKwlibAlfYnNhZXNfa2V5X2NvbnZlcnQKKwlhZGQJcjQsICRrZXksICMyNDgKKwl2bGRtaWEJcjQsIHtAWE1NWzZdfQorCXZzdG1pYQlyMTIsICB7QFhNTVsxNV19CQlAIHNhdmUgbGFzdCByb3VuZCBrZXkKKwl2ZW9yCUBYTU1bN10sIEBYTU1bN10sIEBYTU1bNl0JQCBmaXggdXAgcm91bmQgMCBrZXkKKwl2c3RtaWEJcjQsIHtAWE1NWzddfQorCisuYWxpZ24JMgorMDoJc3ViCXNwLCAjMHg5MAkJCUAgcGxhY2UgZm9yIHR3ZWFrWzldCisjZW5kaWYKKwl2bGQxLjgJe0BYTU1bOF19LCBbcjBdCQkJQCBpbml0aWFsIHR3ZWFrCisJYWRyCSRtYWdpYywgLkx4dHNfbWFnaWMKKworCXRzdAkkbGVuLCAjMHhmCQkJQCBpZiBub3QgbXVsdGlwbGUgb2YgMTYKKwlpdAluZQkJCQlAIFRodW1iMiB0aGluZywgc2FuaXR5IGNoZWNrIGluIEFSTQorCXN1Ym5lCSRsZW4sICMweDEwCQkJQCBzdWJ0cmFjdCBhbm90aGVyIDE2IGJ5dGVzCisJc3VicwkkbGVuLCAjMHg4MAorCisJYmxvCS5MeHRzX2RlY19zaG9ydAorCWIJLkx4dHNfZGVjX2xvb3AKKworLmFsaWduCTQKKy5MeHRzX2RlY19sb29wOgorCXZsZG1pYQkJJG1hZ2ljLCB7JHR3bWFza30JQCBsb2FkIFhUUyBtYWdpYworCXZzaHIuczY0CUBUWzBdLCBAWE1NWzhdLCAjNjMKKwltb3YJCXIwLCBzcAorCXZhbmQJCUBUWzBdLCBAVFswXSwgJHR3bWFzaworX19fCitmb3IoJGk9OTskaTwxNjskaSsrKSB7CiskY29kZS49PDxfX187CisJdmFkZC51NjQJQFhNTVskaV0sIEBYTU1bJGktMV0sIEBYTU1bJGktMV0KKwl2c3QxLjY0CQl7QFhNTVskaS0xXX0sIFtyMCw6MTI4XSEKKwl2c3dwCQlgJkRoaSgiQFRbMF0iKWAsYCZEbG8oIkBUWzBdIilgCisJdnNoci5zNjQJQFRbMV0sIEBYTU1bJGldLCAjNjMKKwl2ZW9yCQlAWE1NWyRpXSwgQFhNTVskaV0sIEBUWzBdCisJdmFuZAkJQFRbMV0sIEBUWzFdLCAkdHdtYXNrCitfX18KKwlAVD1yZXZlcnNlKEBUKTsKKworJGNvZGUuPTw8X19fIGlmICgkaT49MTApOworCXZsZDEuOAkJe0BYTU1bJGktMTBdfSwgWyRpbnBdIQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPj0xMSk7CisJdmVvcgkJQFhNTVskaS0xMV0sIEBYTU1bJGktMTFdLCBAWE1NWyRpLTNdCitfX18KK30KKyRjb2RlLj08PF9fXzsKKwl2YWRkLnU2NAlAWE1NWzhdLCBAWE1NWzE1XSwgQFhNTVsxNV0KKwl2c3QxLjY0CQl7QFhNTVsxNV19LCBbcjAsOjEyOF0hCisJdnN3cAkJYCZEaGkoIkBUWzBdIilgLGAmRGxvKCJAVFswXSIpYAorCXZlb3IJCUBYTU1bOF0sIEBYTU1bOF0sIEBUWzBdCisJdnN0MS42NAkJe0BYTU1bOF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCisJdmxkMS44CQl7QFhNTVs2XS1AWE1NWzddfSwgWyRpbnBdIQorCXZlb3IJCUBYTU1bNV0sIEBYTU1bNV0sIEBYTU1bMTNdCisjaWZuZGVmCUJTQUVTX0FTTV9FWFRFTkRFRF9LRVkKKwlhZGQJCXI0LCBzcCwgIzB4OTAJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisjZWxzZQorCWFkZAkJcjQsICRrZXksICMyNDgJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisjZW5kaWYKKwl2ZW9yCQlAWE1NWzZdLCBAWE1NWzZdLCBAWE1NWzE0XQorCW1vdgkJcjUsICRyb3VuZHMJCQlAIHBhc3Mgcm91bmRzCisJdmVvcgkJQFhNTVs3XSwgQFhNTVs3XSwgQFhNTVsxNV0KKwltb3YJCXIwLCBzcAorCisJYmwJCV9ic2Flc19kZWNyeXB0OAorCisJdmxkMS42NAkJe0BYTU1bIDhdLUBYTU1bIDldfSwgW3IwLDoxMjhdIQorCXZsZDEuNjQJCXtAWE1NWzEwXS1AWE1NWzExXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWyA4XQorCXZsZDEuNjQJCXtAWE1NWzEyXS1AWE1NWzEzXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNl0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bOV0sIEBYTU1bNF0sIEBYTU1bMTFdCisJdmxkMS42NAkJe0BYTU1bMTRdLUBYTU1bMTVdfSwgW3IwLDoxMjhdIQorCXZlb3IJCUBYTU1bMTBdLCBAWE1NWzJdLCBAWE1NWzEyXQorCXZzdDEuOAkJe0BYTU1bOF0tQFhNTVs5XX0sIFskb3V0XSEKKwl2ZW9yCQlAWE1NWzExXSwgQFhNTVs3XSwgQFhNTVsxM10KKwl2ZW9yCQlAWE1NWzEyXSwgQFhNTVszXSwgQFhNTVsxNF0KKwl2c3QxLjgJCXtAWE1NWzEwXS1AWE1NWzExXX0sIFskb3V0XSEKKwl2ZW9yCQlAWE1NWzEzXSwgQFhNTVs1XSwgQFhNTVsxNV0KKwl2c3QxLjgJCXtAWE1NWzEyXS1AWE1NWzEzXX0sIFskb3V0XSEKKworCXZsZDEuNjQJCXtAWE1NWzhdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKworCXN1YnMJCSRsZW4sICMweDgwCisJYnBsCQkuTHh0c19kZWNfbG9vcAorCisuTHh0c19kZWNfc2hvcnQ6CisJYWRkcwkJJGxlbiwgIzB4NzAKKwlibWkJCS5MeHRzX2RlY19kb25lCisKKwl2bGRtaWEJCSRtYWdpYywgeyR0d21hc2t9CUAgbG9hZCBYVFMgbWFnaWMKKwl2c2hyLnM2NAlAVFswXSwgQFhNTVs4XSwgIzYzCisJbW92CQlyMCwgc3AKKwl2YW5kCQlAVFswXSwgQFRbMF0sICR0d21hc2sKK19fXworZm9yKCRpPTk7JGk8MTY7JGkrKykgeworJGNvZGUuPTw8X19fOworCXZhZGQudTY0CUBYTU1bJGldLCBAWE1NWyRpLTFdLCBAWE1NWyRpLTFdCisJdnN0MS42NAkJe0BYTU1bJGktMV19LCBbcjAsOjEyOF0hCisJdnN3cAkJYCZEaGkoIkBUWzBdIilgLGAmRGxvKCJAVFswXSIpYAorCXZzaHIuczY0CUBUWzFdLCBAWE1NWyRpXSwgIzYzCisJdmVvcgkJQFhNTVskaV0sIEBYTU1bJGldLCBAVFswXQorCXZhbmQJCUBUWzFdLCBAVFsxXSwgJHR3bWFzaworX19fCisJQFQ9cmV2ZXJzZShAVCk7CisKKyRjb2RlLj08PF9fXyBpZiAoJGk+PTEwKTsKKwl2bGQxLjgJCXtAWE1NWyRpLTEwXX0sIFskaW5wXSEKKwlzdWJzCQkkbGVuLCAjMHgxMAorCWJtaQkJLkx4dHNfZGVjX2AkaS05YAorX19fCiskY29kZS49PDxfX18gaWYgKCRpPj0xMSk7CisJdmVvcgkJQFhNTVskaS0xMV0sIEBYTU1bJGktMTFdLCBAWE1NWyRpLTNdCitfX18KK30KKyRjb2RlLj08PF9fXzsKKwlzdWIJCSRsZW4sICMweDEwCisJdnN0MS42NAkJe0BYTU1bMTVdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKworCXZsZDEuOAkJe0BYTU1bNl19LCBbJGlucF0hCisJdmVvcgkJQFhNTVs1XSwgQFhNTVs1XSwgQFhNTVsxM10KKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCWFkZAkJcjQsIHNwLCAjMHg5MAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbHNlCisJYWRkCQlyNCwgJGtleSwgIzI0OAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbmRpZgorCXZlb3IJCUBYTU1bNl0sIEBYTU1bNl0sIEBYTU1bMTRdCisJbW92CQlyNSwgJHJvdW5kcwkJCUAgcGFzcyByb3VuZHMKKwltb3YJCXIwLCBzcAorCisJYmwJCV9ic2Flc19kZWNyeXB0OAorCisJdmxkMS42NAkJe0BYTU1bIDhdLUBYTU1bIDldfSwgW3IwLDoxMjhdIQorCXZsZDEuNjQJCXtAWE1NWzEwXS1AWE1NWzExXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWyA4XQorCXZsZDEuNjQJCXtAWE1NWzEyXS1AWE1NWzEzXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNl0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bOV0sIEBYTU1bNF0sIEBYTU1bMTFdCisJdmxkMS42NAkJe0BYTU1bMTRdfSwgW3IwLDoxMjhdIQorCXZlb3IJCUBYTU1bMTBdLCBAWE1NWzJdLCBAWE1NWzEyXQorCXZzdDEuOAkJe0BYTU1bOF0tQFhNTVs5XX0sIFskb3V0XSEKKwl2ZW9yCQlAWE1NWzExXSwgQFhNTVs3XSwgQFhNTVsxM10KKwl2ZW9yCQlAWE1NWzEyXSwgQFhNTVszXSwgQFhNTVsxNF0KKwl2c3QxLjgJCXtAWE1NWzEwXS1AWE1NWzExXX0sIFskb3V0XSEKKwl2c3QxLjgJCXtAWE1NWzEyXX0sIFskb3V0XSEKKworCXZsZDEuNjQJCXtAWE1NWzhdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKwliCQkuTHh0c19kZWNfZG9uZQorLmFsaWduCTQKKy5MeHRzX2RlY182OgorCXZzdDEuNjQJCXtAWE1NWzE0XX0sIFtyMCw6MTI4XQkJQCBuZXh0IHJvdW5kIHR3ZWFrCisKKwl2ZW9yCQlAWE1NWzRdLCBAWE1NWzRdLCBAWE1NWzEyXQorI2lmbmRlZglCU0FFU19BU01fRVhURU5ERURfS0VZCisJYWRkCQlyNCwgc3AsICMweDkwCQkJQCBwYXNzIGtleSBzY2hlZHVsZQorI2Vsc2UKKwlhZGQJCXI0LCAka2V5LCAjMjQ4CQkJQCBwYXNzIGtleSBzY2hlZHVsZQorI2VuZGlmCisJdmVvcgkJQFhNTVs1XSwgQFhNTVs1XSwgQFhNTVsxM10KKwltb3YJCXI1LCAkcm91bmRzCQkJQCBwYXNzIHJvdW5kcworCW1vdgkJcjAsIHNwCisKKwlibAkJX2JzYWVzX2RlY3J5cHQ4CisKKwl2bGQxLjY0CQl7QFhNTVsgOF0tQFhNTVsgOV19LCBbcjAsOjEyOF0hCisJdmxkMS42NAkJe0BYTU1bMTBdLUBYTU1bMTFdfSwgW3IwLDoxMjhdIQorCXZlb3IJCUBYTU1bMF0sIEBYTU1bMF0sIEBYTU1bIDhdCisJdmxkMS42NAkJe0BYTU1bMTJdLUBYTU1bMTNdfSwgW3IwLDoxMjhdIQorCXZlb3IJCUBYTU1bMV0sIEBYTU1bMV0sIEBYTU1bIDldCisJdmVvcgkJQFhNTVs4XSwgQFhNTVs2XSwgQFhNTVsxMF0KKwl2c3QxLjgJCXtAWE1NWzBdLUBYTU1bMV19LCBbJG91dF0hCisJdmVvcgkJQFhNTVs5XSwgQFhNTVs0XSwgQFhNTVsxMV0KKwl2ZW9yCQlAWE1NWzEwXSwgQFhNTVsyXSwgQFhNTVsxMl0KKwl2c3QxLjgJCXtAWE1NWzhdLUBYTU1bOV19LCBbJG91dF0hCisJdmVvcgkJQFhNTVsxMV0sIEBYTU1bN10sIEBYTU1bMTNdCisJdnN0MS44CQl7QFhNTVsxMF0tQFhNTVsxMV19LCBbJG91dF0hCisKKwl2bGQxLjY0CQl7QFhNTVs4XX0sIFtyMCw6MTI4XQkJQCBuZXh0IHJvdW5kIHR3ZWFrCisJYgkJLkx4dHNfZGVjX2RvbmUKKy5hbGlnbgk0CisuTHh0c19kZWNfNToKKwl2c3QxLjY0CQl7QFhNTVsxM119LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCisJdmVvcgkJQFhNTVszXSwgQFhNTVszXSwgQFhNTVsxMV0KKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCWFkZAkJcjQsIHNwLCAjMHg5MAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbHNlCisJYWRkCQlyNCwgJGtleSwgIzI0OAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbmRpZgorCXZlb3IJCUBYTU1bNF0sIEBYTU1bNF0sIEBYTU1bMTJdCisJbW92CQlyNSwgJHJvdW5kcwkJCUAgcGFzcyByb3VuZHMKKwltb3YJCXIwLCBzcAorCisJYmwJCV9ic2Flc19kZWNyeXB0OAorCisJdmxkMS42NAkJe0BYTU1bIDhdLUBYTU1bIDldfSwgW3IwLDoxMjhdIQorCXZsZDEuNjQJCXtAWE1NWzEwXS1AWE1NWzExXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzBdLCBAWE1NWzBdLCBAWE1NWyA4XQorCXZsZDEuNjQJCXtAWE1NWzEyXX0sIFtyMCw6MTI4XSEKKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNl0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bOV0sIEBYTU1bNF0sIEBYTU1bMTFdCisJdmVvcgkJQFhNTVsxMF0sIEBYTU1bMl0sIEBYTU1bMTJdCisJdnN0MS44CQl7QFhNTVs4XS1AWE1NWzldfSwgWyRvdXRdIQorCXZzdDEuOAkJe0BYTU1bMTBdfSwgWyRvdXRdIQorCisJdmxkMS42NAkJe0BYTU1bOF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCWIJCS5MeHRzX2RlY19kb25lCisuYWxpZ24JNAorLkx4dHNfZGVjXzQ6CisJdnN0MS42NAkJe0BYTU1bMTJdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKworCXZlb3IJCUBYTU1bMl0sIEBYTU1bMl0sIEBYTU1bMTBdCisjaWZuZGVmCUJTQUVTX0FTTV9FWFRFTkRFRF9LRVkKKwlhZGQJCXI0LCBzcCwgIzB4OTAJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisjZWxzZQorCWFkZAkJcjQsICRrZXksICMyNDgJCQlAIHBhc3Mga2V5IHNjaGVkdWxlCisjZW5kaWYKKwl2ZW9yCQlAWE1NWzNdLCBAWE1NWzNdLCBAWE1NWzExXQorCW1vdgkJcjUsICRyb3VuZHMJCQlAIHBhc3Mgcm91bmRzCisJbW92CQlyMCwgc3AKKworCWJsCQlfYnNhZXNfZGVjcnlwdDgKKworCXZsZDEuNjQJCXtAWE1NWyA4XS1AWE1NWyA5XX0sIFtyMCw6MTI4XSEKKwl2bGQxLjY0CQl7QFhNTVsxMF0tQFhNTVsxMV19LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsgOF0KKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNl0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZlb3IJCUBYTU1bOV0sIEBYTU1bNF0sIEBYTU1bMTFdCisJdnN0MS44CQl7QFhNTVs4XS1AWE1NWzldfSwgWyRvdXRdIQorCisJdmxkMS42NAkJe0BYTU1bOF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCWIJCS5MeHRzX2RlY19kb25lCisuYWxpZ24JNAorLkx4dHNfZGVjXzM6CisJdnN0MS42NAkJe0BYTU1bMTFdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKworCXZlb3IJCUBYTU1bMV0sIEBYTU1bMV0sIEBYTU1bOV0KKyNpZm5kZWYJQlNBRVNfQVNNX0VYVEVOREVEX0tFWQorCWFkZAkJcjQsIHNwLCAjMHg5MAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbHNlCisJYWRkCQlyNCwgJGtleSwgIzI0OAkJCUAgcGFzcyBrZXkgc2NoZWR1bGUKKyNlbmRpZgorCXZlb3IJCUBYTU1bMl0sIEBYTU1bMl0sIEBYTU1bMTBdCisJbW92CQlyNSwgJHJvdW5kcwkJCUAgcGFzcyByb3VuZHMKKwltb3YJCXIwLCBzcAorCisJYmwJCV9ic2Flc19kZWNyeXB0OAorCisJdmxkMS42NAkJe0BYTU1bOF0tQFhNTVs5XX0sIFtyMCw6MTI4XSEKKwl2bGQxLjY0CQl7QFhNTVsxMF19LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsgOF0KKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZlb3IJCUBYTU1bOF0sIEBYTU1bNl0sIEBYTU1bMTBdCisJdnN0MS44CQl7QFhNTVswXS1AWE1NWzFdfSwgWyRvdXRdIQorCXZzdDEuOAkJe0BYTU1bOF19LCBbJG91dF0hCisKKwl2bGQxLjY0CQl7QFhNTVs4XX0sIFtyMCw6MTI4XQkJQCBuZXh0IHJvdW5kIHR3ZWFrCisJYgkJLkx4dHNfZGVjX2RvbmUKKy5hbGlnbgk0CisuTHh0c19kZWNfMjoKKwl2c3QxLjY0CQl7QFhNTVsxMF19LCBbcjAsOjEyOF0JCUAgbmV4dCByb3VuZCB0d2VhaworCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVs4XQorI2lmbmRlZglCU0FFU19BU01fRVhURU5ERURfS0VZCisJYWRkCQlyNCwgc3AsICMweDkwCQkJQCBwYXNzIGtleSBzY2hlZHVsZQorI2Vsc2UKKwlhZGQJCXI0LCAka2V5LCAjMjQ4CQkJQCBwYXNzIGtleSBzY2hlZHVsZQorI2VuZGlmCisJdmVvcgkJQFhNTVsxXSwgQFhNTVsxXSwgQFhNTVs5XQorCW1vdgkJcjUsICRyb3VuZHMJCQlAIHBhc3Mgcm91bmRzCisJbW92CQlyMCwgc3AKKworCWJsCQlfYnNhZXNfZGVjcnlwdDgKKworCXZsZDEuNjQJCXtAWE1NWzhdLUBYTU1bOV19LCBbcjAsOjEyOF0hCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVsgOF0KKwl2ZW9yCQlAWE1NWzFdLCBAWE1NWzFdLCBAWE1NWyA5XQorCXZzdDEuOAkJe0BYTU1bMF0tQFhNTVsxXX0sIFskb3V0XSEKKworCXZsZDEuNjQJCXtAWE1NWzhdfSwgW3IwLDoxMjhdCQlAIG5leHQgcm91bmQgdHdlYWsKKwliCQkuTHh0c19kZWNfZG9uZQorLmFsaWduCTQKKy5MeHRzX2RlY18xOgorCW1vdgkJcjAsIHNwCisJdmVvcgkJQFhNTVswXSwgQFhNTVs4XQorCW1vdgkJcjEsIHNwCisJdnN0MS44CQl7QFhNTVswXX0sIFtzcCw6MTI4XQorCW1vdgkJcjIsICRrZXkKKwltb3YJCXI0LCAkZnAJCQkJQCBwcmVzZXJ2ZSBmcAorCW1vdgkJcjUsICRtYWdpYwkJCUAgcHJlc2VydmUgbWFnaWMKKworCWJsCQlBRVNfZGVjcnlwdAorCisJdmxkMS44CQl7QFhNTVswXX0sIFtzcCw6MTI4XQorCXZlb3IJCUBYTU1bMF0sIEBYTU1bMF0sIEBYTU1bOF0KKwl2c3QxLjgJCXtAWE1NWzBdfSwgWyRvdXRdIQorCW1vdgkJJGZwLCByNAorCW1vdgkJJG1hZ2ljLCByNQorCisJdm1vdgkJQFhNTVs4XSwgQFhNTVs5XQkJQCBuZXh0IHJvdW5kIHR3ZWFrCisKKy5MeHRzX2RlY19kb25lOgorI2lmbmRlZglYVFNfQ0hBSU5fVFdFQUsKKwlhZGRzCQkkbGVuLCAjMHgxMAorCWJlcQkJLkx4dHNfZGVjX3JldAorCisJQCBjYWxjdWxhdGUgb25lIHJvdW5kIG9mIGV4dHJhIHR3ZWFrIGZvciB0aGUgc3RvbGVuIGNpcGhlcnRleHQKKwl2bGRtaWEJCSRtYWdpYywgeyR0d21hc2t9CisJdnNoci5zNjQJQFhNTVs2XSwgQFhNTVs4XSwgIzYzCisJdmFuZAkJQFhNTVs2XSwgQFhNTVs2XSwgJHR3bWFzaworCXZhZGQudTY0CUBYTU1bOV0sIEBYTU1bOF0sIEBYTU1bOF0KKwl2c3dwCQlgJkRoaSgiQFhNTVs2XSIpYCxgJkRsbygiQFhNTVs2XSIpYAorCXZlb3IJCUBYTU1bOV0sIEBYTU1bOV0sIEBYTU1bNl0KKworCUAgcGVyZm9ybSB0aGUgZmluYWwgZGVjcnlwdGlvbiB3aXRoIHRoZSBsYXN0IHR3ZWFrIHZhbHVlCisJdmxkMS44CQl7QFhNTVswXX0sIFskaW5wXSEKKwltb3YJCXIwLCBzcAorCXZlb3IJCUBYTU1bMF0sIEBYTU1bMF0sIEBYTU1bOV0KKwltb3YJCXIxLCBzcAorCXZzdDEuOAkJe0BYTU1bMF19LCBbc3AsOjEyOF0KKwltb3YJCXIyLCAka2V5CisJbW92CQlyNCwgJGZwCQkJQCBwcmVzZXJ2ZSBmcAorCisJYmwJCUFFU19kZWNyeXB0CisKKwl2bGQxLjgJCXtAWE1NWzBdfSwgW3NwLDoxMjhdCisJdmVvcgkJQFhNTVswXSwgQFhNTVswXSwgQFhNTVs5XQorCXZzdDEuOAkJe0BYTU1bMF19LCBbJG91dF0KKworCW1vdgkJcjYsICRvdXQKKy5MeHRzX2RlY19zdGVhbDoKKwlsZHJiCQlyMSwgWyRvdXRdCisJbGRyYgkJcjAsIFskaW5wXSwgIzEKKwlzdHJiCQlyMSwgWyRvdXQsICMweDEwXQorCXN0cmIJCXIwLCBbJG91dF0sICMxCisKKwlzdWJzCQkkbGVuLCAjMQorCWJoaQkJLkx4dHNfZGVjX3N0ZWFsCisKKwl2bGQxLjgJCXtAWE1NWzBdfSwgW3I2XQorCW1vdgkJcjAsIHNwCisJdmVvcgkJQFhNTVswXSwgQFhNTVs4XQorCW1vdgkJcjEsIHNwCisJdnN0MS44CQl7QFhNTVswXX0sIFtzcCw6MTI4XQorCW1vdgkJcjIsICRrZXkKKworCWJsCQlBRVNfZGVjcnlwdAorCisJdmxkMS44CQl7QFhNTVswXX0sIFtzcCw6MTI4XQorCXZlb3IJCUBYTU1bMF0sIEBYTU1bMF0sIEBYTU1bOF0KKwl2c3QxLjgJCXtAWE1NWzBdfSwgW3I2XQorCW1vdgkJJGZwLCByNAorI2VuZGlmCisKKy5MeHRzX2RlY19yZXQ6CisJYmljCQlyMCwgJGZwLCAjMHhmCisJdm1vdi5pMzIJcTAsICMwCisJdm1vdi5pMzIJcTEsICMwCisjaWZkZWYJWFRTX0NIQUlOX1RXRUFLCisJbGRyCQlyMSwgWyRmcCwgIzB4MjArVkZQX0FCSV9GUkFNRV0JQCBjaGFpbiB0d2VhaworI2VuZGlmCisuTHh0c19kZWNfYnplcm86CQkJCUAgd2lwZSBrZXkgc2NoZWR1bGUgW2lmIGFueV0KKwl2c3RtaWEJCXNwISwge3EwLXExfQorCWNtcAkJc3AsIHIwCisJYm5lCQkuTHh0c19kZWNfYnplcm8KKworCW1vdgkJc3AsICRmcAorI2lmZGVmCVhUU19DSEFJTl9UV0VBSworCXZzdDEuOAkJe0BYTU1bOF19LCBbcjFdCisjZW5kaWYKKwlWRlBfQUJJX1BPUAorCWxkbWlhCQlzcCEsIHtyNC1yMTAsIHBjfQlAIHJldHVybgorCisuc2l6ZQlic2Flc194dHNfZGVjcnlwdCwuLWJzYWVzX3h0c19kZWNyeXB0CitfX18KK30KKyRjb2RlLj08PF9fXzsKKyNlbmRpZgorX19fCisKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwoJDEpL2dlbTsKKworb3BlbiBTRUxGLCQwOword2hpbGUoPFNFTEY+KSB7CisJbmV4dCBpZiAoL14jIS8pOworICAgICAgICBsYXN0IGlmICghcy9eIy9ALyBhbmQgIS9eJC8pOworICAgICAgICBwcmludDsKK30KK2Nsb3NlIFNFTEY7CisKK3ByaW50ICRjb2RlOworCitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXJtNjRjcHVpZC5TIGIvY3J5cHRvL2FybTY0Y3B1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzc4YWMxCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2FybTY0Y3B1aWQuUwpAQCAtMCwwICsxLDQ2IEBACisjaW5jbHVkZSAiYXJtX2FyY2guaCIKKworLnRleHQKKy5hcmNoCWFybXY4LWErY3J5cHRvCisKKy5hbGlnbgk1CisuZ2xvYmFsCV9hcm12N19uZW9uX3Byb2JlCisudHlwZQlfYXJtdjdfbmVvbl9wcm9iZSwlZnVuY3Rpb24KK19hcm12N19uZW9uX3Byb2JlOgorCW9ycgl2MTUuMTZiLCB2MTUuMTZiLCB2MTUuMTZiCisJcmV0Cisuc2l6ZQlfYXJtdjdfbmVvbl9wcm9iZSwuLV9hcm12N19uZW9uX3Byb2JlCisKKy5nbG9iYWwJX2FybXY3X3RpY2sKKy50eXBlCV9hcm12N190aWNrLCVmdW5jdGlvbgorX2FybXY3X3RpY2s6CisJbXJzCXgwLCBDTlRWQ1RfRUwwCisJcmV0Cisuc2l6ZQlfYXJtdjdfdGljaywuLV9hcm12N190aWNrCisKKy5nbG9iYWwJX2FybXY4X2Flc19wcm9iZQorLnR5cGUJX2FybXY4X2Flc19wcm9iZSwlZnVuY3Rpb24KK19hcm12OF9hZXNfcHJvYmU6CisJYWVzZQl2MC4xNmIsIHYwLjE2YgorCXJldAorLnNpemUJX2FybXY4X2Flc19wcm9iZSwuLV9hcm12OF9hZXNfcHJvYmUKKworLmdsb2JhbAlfYXJtdjhfc2hhMV9wcm9iZQorLnR5cGUJX2FybXY4X3NoYTFfcHJvYmUsJWZ1bmN0aW9uCitfYXJtdjhfc2hhMV9wcm9iZToKKwlzaGExaAlzMCwgczAKKwlyZXQKKy5zaXplCV9hcm12OF9zaGExX3Byb2JlLC4tX2FybXY4X3NoYTFfcHJvYmUKKworLmdsb2JhbAlfYXJtdjhfc2hhMjU2X3Byb2JlCisudHlwZQlfYXJtdjhfc2hhMjU2X3Byb2JlLCVmdW5jdGlvbgorX2FybXY4X3NoYTI1Nl9wcm9iZToKKwlzaGEyNTZzdTAJdjAuNHMsIHYwLjRzCisJcmV0Cisuc2l6ZQlfYXJtdjhfc2hhMjU2X3Byb2JlLC4tX2FybXY4X3NoYTI1Nl9wcm9iZQorLmdsb2JhbAlfYXJtdjhfcG11bGxfcHJvYmUKKy50eXBlCV9hcm12OF9wbXVsbF9wcm9iZSwlZnVuY3Rpb24KK19hcm12OF9wbXVsbF9wcm9iZToKKwlwbXVsbAl2MC4xcSwgdjAuMWQsIHYwLjFkCisJcmV0Cisuc2l6ZQlfYXJtdjhfcG11bGxfcHJvYmUsLi1fYXJtdjhfcG11bGxfcHJvYmUKZGlmZiAtLWdpdCBhL2NyeXB0by9hcm1fYXJjaC5oIGIvY3J5cHRvL2FybV9hcmNoLmgKaW5kZXggNWE4MzEwNy4uNmZhODcyNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FybV9hcmNoLmgKKysrIGIvY3J5cHRvL2FybV9hcmNoLmgKQEAgLTEwLDEzICsxMCwyNCBAQAogIyAgIGRlZmluZSBfX0FSTUVMX18KICMgIGVuZGlmCiAjIGVsaWYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGlmCWRlZmluZWQoX19hYXJjaDY0X18pCisjICAgZGVmaW5lIF9fQVJNX0FSQ0hfXyA4CisjICAgaWYgX19CWVRFX09SREVSX189PV9fT1JERVJfQklHX0VORElBTl9fCisjICAgIGRlZmluZSBfX0FSTUVCX18KKyMgICBlbHNlCisjICAgIGRlZmluZSBfX0FSTUVMX18KKyMgICBlbmRpZgogICAvKgogICAgKiBXaHkgZG9lc24ndCBnY2MgZGVmaW5lIF9fQVJNX0FSQ0hfXz8gSW5zdGVhZCBpdCBkZWZpbmVzCiAgICAqIGJ1bmNoIG9mIGJlbG93IG1hY3Jvcy4gU2VlIGFsbF9hcmNoaXRlY3RpcmVzW10gdGFibGUgaW4KICAgICogZ2NjL2NvbmZpZy9hcm0vYXJtLmMuIE9uIGEgc2lkZSBub3RlIGl0IGRlZmluZXMKICAgICogX19BUk1FTF9fL19fQVJNRUJfXyBmb3IgbGl0dGxlLS9iaWctZW5kaWFuLgogICAgKi8KLSMgIGlmCWRlZmluZWQoX19BUk1fQVJDSF83X18pCXx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKQl8fCBcCisjICBlbGlmIGRlZmluZWQoX19BUk1fQVJDSCkKKyMgICBkZWZpbmUgX19BUk1fQVJDSF9fIF9fQVJNX0FSQ0gKKyMgIGVsaWYJZGVmaW5lZChfX0FSTV9BUkNIXzhBX18pCisjICAgZGVmaW5lIF9fQVJNX0FSQ0hfXyA4CisjICBlbGlmCWRlZmluZWQoX19BUk1fQVJDSF83X18pCXx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKQl8fCBcCiAJZGVmaW5lZChfX0FSTV9BUkNIXzdSX18pfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdNX18pCXx8IFwKIAlkZWZpbmVkKF9fQVJNX0FSQ0hfN0VNX18pCiAjICAgZGVmaW5lIF9fQVJNX0FSQ0hfXyA3CkBAIC00Myw5ICs1NCwxMyBAQAogCiAjaWYgIV9fQVNTRU1CTEVSX18KIGV4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9hcm1jYXBfUDsKKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogI2RlZmluZSBBUk1WN19ORU9OICAgICAgKDE8PDApCiAjZGVmaW5lIEFSTVY3X1RJQ0sgICAgICAoMTw8MSkKLSNlbmRpZgorI2RlZmluZSBBUk1WOF9BRVMgICAgICAgKDE8PDIpCisjZGVmaW5lIEFSTVY4X1NIQTEgICAgICAoMTw8MykKKyNkZWZpbmUgQVJNVjhfU0hBMjU2ICAgICgxPDw0KQorI2RlZmluZSBBUk1WOF9QTVVMTCAgICAgKDE8PDUpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FybWNhcC5jIGIvY3J5cHRvL2FybWNhcC5jCmluZGV4IDlhYmFmMzkuLjdlNDZkMDcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hcm1jYXAuYworKysgYi9jcnlwdG8vYXJtY2FwLmMKQEAgLTE5LDkgKzE5LDEzIEBAIHN0YXRpYyB2b2lkIGlsbF9oYW5kbGVyIChpbnQgc2lnKSB7IHNpZ2xvbmdqbXAoaWxsX2ptcCxzaWcpOyB9CiAgKiBBUk0gY29tcGlsZXJzIHN1cHBvcnQgaW5saW5lIGFzc2VtYmxlci4uLgogICovCiB2b2lkIF9hcm12N19uZW9uX3Byb2JlKHZvaWQpOwotdW5zaWduZWQgaW50IF9hcm12N190aWNrKHZvaWQpOwordm9pZCBfYXJtdjhfYWVzX3Byb2JlKHZvaWQpOwordm9pZCBfYXJtdjhfc2hhMV9wcm9iZSh2b2lkKTsKK3ZvaWQgX2FybXY4X3NoYTI1Nl9wcm9iZSh2b2lkKTsKK3ZvaWQgX2FybXY4X3BtdWxsX3Byb2JlKHZvaWQpOwordW5zaWduZWQgbG9uZyBfYXJtdjdfdGljayh2b2lkKTsKIAotdW5zaWduZWQgaW50IE9QRU5TU0xfcmR0c2Modm9pZCkKK3Vuc2lnbmVkIGxvbmcgT1BFTlNTTF9yZHRzYyh2b2lkKQogCXsKIAlpZiAoT1BFTlNTTF9hcm1jYXBfUCAmIEFSTVY3X1RJQ0spCiAJCXJldHVybiBfYXJtdjdfdGljaygpOwpAQCAtMjksOSArMzMsNDEgQEAgdW5zaWduZWQgaW50IE9QRU5TU0xfcmR0c2Modm9pZCkKIAkJcmV0dXJuIDA7CiAJfQogCisvKgorICogVXNlIGEgd2VhayByZWZlcmVuY2UgdG8gZ2V0YXV4dmFsKCkgc28gd2UgY2FuIHVzZSBpdCBpZiBpdCBpcyBhdmFpbGFibGUgYnV0CisgKiBkb24ndCBicmVhayB0aGUgYnVpbGQgaWYgaXQgaXMgbm90LgorICovCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIKIHZvaWQgT1BFTlNTTF9jcHVpZF9zZXR1cCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0YXV4dmFsKHVuc2lnbmVkIGxvbmcgdHlwZSkgX19hdHRyaWJ1dGVfXygod2VhaykpOworI2Vsc2UKK3N0YXRpYyB1bnNpZ25lZCBsb25nICgqZ2V0YXV4dmFsKSh1bnNpZ25lZCBsb25nKSA9IE5VTEw7CiAjZW5kaWYKKworLyoKKyAqIEFSTSBwdXRzIHRoZSB0aGUgZmVhdHVyZSBiaXRzIGZvciBDcnlwdG8gRXh0ZW5zaW9ucyBpbiBBVF9IV0NBUDIsIHdoZXJlYXMKKyAqIEFBcmNoNjQgdXNlZCBBVF9IV0NBUC4KKyAqLworI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZCAoX19hcm0pCisjIGRlZmluZSBIV0NBUAkJCTE2CS8qIEFUX0hXQ0FQICovCisjIGRlZmluZSBIV0NBUF9ORU9OCQkoMSA8PCAxMikKKworIyBkZWZpbmUgSFdDQVBfQ0UJCTI2CS8qIEFUX0hXQ0FQMiAqLworIyBkZWZpbmUgSFdDQVBfQ0VfQUVTCQkoMSA8PCAwKQorIyBkZWZpbmUgSFdDQVBfQ0VfUE1VTEwJCSgxIDw8IDEpCisjIGRlZmluZSBIV0NBUF9DRV9TSEExCQkoMSA8PCAyKQorIyBkZWZpbmUgSFdDQVBfQ0VfU0hBMjU2CSgxIDw8IDMpCisjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorIyBkZWZpbmUgSFdDQVAJCQkxNgkvKiBBVF9IV0NBUCAqLworIyBkZWZpbmUgSFdDQVBfTkVPTgkJKDEgPDwgMSkKKworIyBkZWZpbmUgSFdDQVBfQ0UJCUhXQ0FQCisjIGRlZmluZSBIV0NBUF9DRV9BRVMJCSgxIDw8IDMpCisjIGRlZmluZSBIV0NBUF9DRV9QTVVMTAkJKDEgPDwgNCkKKyMgZGVmaW5lIEhXQ0FQX0NFX1NIQTEJCSgxIDw8IDUpCisjIGRlZmluZSBIV0NBUF9DRV9TSEEyNTYJKDEgPDwgNikKKyNlbmRpZgorCiB2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKIAl7CiAJY2hhciAqZTsKQEAgLTQ0LDcgKzgwLDcgQEAgdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCiAgCiAJaWYgKChlPWdldGVudigiT1BFTlNTTF9hcm1jYXAiKSkpCiAJCXsKLQkJT1BFTlNTTF9hcm1jYXBfUD1zdHJ0b3VsKGUsTlVMTCwwKTsKKwkJT1BFTlNTTF9hcm1jYXBfUD0odW5zaWduZWQgaW50KXN0cnRvdWwoZSxOVUxMLDApOwogCQlyZXR1cm47CiAJCX0KIApAQCAtNjQsMTAgKzEwMCw1MSBAQCB2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywmaWxsX2FjdC5zYV9tYXNrLCZvc2V0KTsKIAlzaWdhY3Rpb24oU0lHSUxMLCZpbGxfYWN0LCZpbGxfb2FjdCk7CiAKLQlpZiAoc2lnc2V0am1wKGlsbF9qbXAsMSkgPT0gMCkKKwlpZiAoZ2V0YXV4dmFsICE9IE5VTEwpCisJCXsKKwkJaWYgKGdldGF1eHZhbChIV0NBUCkgJiBIV0NBUF9ORU9OKQorCQkJeworCQkJdW5zaWduZWQgbG9uZyBod2NhcCA9IGdldGF1eHZhbChIV0NBUF9DRSk7CisKKwkJCU9QRU5TU0xfYXJtY2FwX1AgfD0gQVJNVjdfTkVPTjsKKworCQkJaWYgKGh3Y2FwICYgSFdDQVBfQ0VfQUVTKQorCQkJCU9QRU5TU0xfYXJtY2FwX1AgfD0gQVJNVjhfQUVTOworCisJCQlpZiAoaHdjYXAgJiBIV0NBUF9DRV9QTVVMTCkKKwkJCQlPUEVOU1NMX2FybWNhcF9QIHw9IEFSTVY4X1BNVUxMOworCisJCQlpZiAoaHdjYXAgJiBIV0NBUF9DRV9TSEExKQorCQkJCU9QRU5TU0xfYXJtY2FwX1AgfD0gQVJNVjhfU0hBMTsKKworCQkJaWYgKGh3Y2FwICYgSFdDQVBfQ0VfU0hBMjU2KQorCQkJCU9QRU5TU0xfYXJtY2FwX1AgfD0gQVJNVjhfU0hBMjU2OworCQkJfQorCQl9CisJZWxzZSBpZiAoc2lnc2V0am1wKGlsbF9qbXAsMSkgPT0gMCkKIAkJewogCQlfYXJtdjdfbmVvbl9wcm9iZSgpOwogCQlPUEVOU1NMX2FybWNhcF9QIHw9IEFSTVY3X05FT047CisJCWlmIChzaWdzZXRqbXAoaWxsX2ptcCwxKSA9PSAwKQorCQkJeworCQkJX2FybXY4X3BtdWxsX3Byb2JlKCk7CisJCQlPUEVOU1NMX2FybWNhcF9QIHw9IEFSTVY4X1BNVUxMfEFSTVY4X0FFUzsKKwkJCX0KKwkJZWxzZSBpZiAoc2lnc2V0am1wKGlsbF9qbXAsMSkgPT0gMCkKKwkJCXsKKwkJCV9hcm12OF9hZXNfcHJvYmUoKTsKKwkJCU9QRU5TU0xfYXJtY2FwX1AgfD0gQVJNVjhfQUVTOworCQkJfQorCQlpZiAoc2lnc2V0am1wKGlsbF9qbXAsMSkgPT0gMCkKKwkJCXsKKwkJCV9hcm12OF9zaGExX3Byb2JlKCk7CisJCQlPUEVOU1NMX2FybWNhcF9QIHw9IEFSTVY4X1NIQTE7CisJCQl9CisJCWlmIChzaWdzZXRqbXAoaWxsX2ptcCwxKSA9PSAwKQorCQkJeworCQkJX2FybXY4X3NoYTI1Nl9wcm9iZSgpOworCQkJT1BFTlNTTF9hcm1jYXBfUCB8PSBBUk1WOF9TSEEyNTY7CisJCQl9CiAJCX0KIAlpZiAoc2lnc2V0am1wKGlsbF9qbXAsMSkgPT0gMCkKIAkJewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FybXY0Y3B1aWQuUyBiL2NyeXB0by9hcm12NGNwdWlkLlMKaW5kZXggMmQ2MThkZS4uYWRkMTFkNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FybXY0Y3B1aWQuUworKysgYi9jcnlwdG8vYXJtdjRjcHVpZC5TCkBAIC03LDE3ICs3LDQ5IEBACiAuZ2xvYmFsCV9hcm12N19uZW9uX3Byb2JlCiAudHlwZQlfYXJtdjdfbmVvbl9wcm9iZSwlZnVuY3Rpb24KIF9hcm12N19uZW9uX3Byb2JlOgotCS53b3JkCTB4ZjI2ZWUxZmUJQCB2b3JyCXExNSxxMTUscTE1Ci0JLndvcmQJMHhlMTJmZmYxZQlAIGJ4CWxyCisJLmJ5dGUJMHhmMCwweDAxLDB4NjAsMHhmMglAIHZvcnIJcTgscTgscTgKKwkuYnl0ZQkweDFlLDB4ZmYsMHgyZiwweGUxCUAgYngJbHIKIC5zaXplCV9hcm12N19uZW9uX3Byb2JlLC4tX2FybXY3X25lb25fcHJvYmUKIAogLmdsb2JhbAlfYXJtdjdfdGljawogLnR5cGUJX2FybXY3X3RpY2ssJWZ1bmN0aW9uCiBfYXJtdjdfdGljazoKLQltcmMJcDE1LDAscjAsYzksYzEzLDAKLQkud29yZAkweGUxMmZmZjFlCUAgYngJbHIKKwltcnJjCXAxNSwxLHIwLHIxLGMxNAkJQCBDTlRWQ1QKKyNpZiBfX0FSTV9BUkNIX18+PTUKKwlieAlscgorI2Vsc2UKKwkud29yZAkweGUxMmZmZjFlCQlAIGJ4CWxyCisjZW5kaWYKIC5zaXplCV9hcm12N190aWNrLC4tX2FybXY3X3RpY2sKIAorLmdsb2JhbAlfYXJtdjhfYWVzX3Byb2JlCisudHlwZQlfYXJtdjhfYWVzX3Byb2JlLCVmdW5jdGlvbgorX2FybXY4X2Flc19wcm9iZToKKwkuYnl0ZQkweDAwLDB4MDMsMHhiMCwweGYzCUAgYWVzZS44CXEwLHEwCisJLmJ5dGUJMHgxZSwweGZmLDB4MmYsMHhlMQlAIGJ4CWxyCisuc2l6ZQlfYXJtdjhfYWVzX3Byb2JlLC4tX2FybXY4X2Flc19wcm9iZQorCisuZ2xvYmFsCV9hcm12OF9zaGExX3Byb2JlCisudHlwZQlfYXJtdjhfc2hhMV9wcm9iZSwlZnVuY3Rpb24KK19hcm12OF9zaGExX3Byb2JlOgorCS5ieXRlCTB4NDAsMHgwYywweDAwLDB4ZjIJQCBzaGExYy4zMglxMCxxMCxxMAorCS5ieXRlCTB4MWUsMHhmZiwweDJmLDB4ZTEJQCBieAlscgorLnNpemUJX2FybXY4X3NoYTFfcHJvYmUsLi1fYXJtdjhfc2hhMV9wcm9iZQorCisuZ2xvYmFsCV9hcm12OF9zaGEyNTZfcHJvYmUKKy50eXBlCV9hcm12OF9zaGEyNTZfcHJvYmUsJWZ1bmN0aW9uCitfYXJtdjhfc2hhMjU2X3Byb2JlOgorCS5ieXRlCTB4NDAsMHgwYywweDAwLDB4ZjMJQCBzaGEyNTZoLjMyCXEwLHEwLHEwCisJLmJ5dGUJMHgxZSwweGZmLDB4MmYsMHhlMQlAIGJ4IGxyCisuc2l6ZQlfYXJtdjhfc2hhMjU2X3Byb2JlLC4tX2FybXY4X3NoYTI1Nl9wcm9iZQorLmdsb2JhbAlfYXJtdjhfcG11bGxfcHJvYmUKKy50eXBlCV9hcm12OF9wbXVsbF9wcm9iZSwlZnVuY3Rpb24KK19hcm12OF9wbXVsbF9wcm9iZToKKwkuYnl0ZQkweDAwLDB4MGUsMHhhMCwweGYyCUAgdm11bGwucDY0CXEwLGQwLGQwCisJLmJ5dGUJMHgxZSwweGZmLDB4MmYsMHhlMQlAIGJ4CWxyCisuc2l6ZQlfYXJtdjhfcG11bGxfcHJvYmUsLi1fYXJtdjhfcG11bGxfcHJvYmUKKworLmFsaWduCTUKIC5nbG9iYWwJT1BFTlNTTF9hdG9taWNfYWRkCiAudHlwZQlPUEVOU1NMX2F0b21pY19hZGQsJWZ1bmN0aW9uCiBPUEVOU1NMX2F0b21pY19hZGQ6CkBAIC0yOCw3ICs2MCw3IEBAIE9QRU5TU0xfYXRvbWljX2FkZDoKIAljbXAJcjIsIzAKIAlibmUJLkxhZGQKIAltb3YJcjAscjMKLQkud29yZAkweGUxMmZmZjFlCUAgYngJbHIKKwlieAlscgogI2Vsc2UKIAlzdG1kYglzcCEse3I0LXI2LGxyfQogCWxkcglyMiwuTHNwaW5sb2NrCkBAIC04MSw5ICsxMTMsMTMgQEAgT1BFTlNTTF9jbGVhbnNlOgogCWFkZHMJcjEscjEsIzQKIAlibmUJLkxpdHRsZQogLkxjbGVhbnNlX2RvbmU6CisjaWYgX19BUk1fQVJDSF9fPj01CisJYngJbHIKKyNlbHNlCiAJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIKIAkud29yZAkweGUxMmZmZjFlCUAgYngJbHIKKyNlbmRpZgogLnNpemUJT1BFTlNTTF9jbGVhbnNlLC4tT1BFTlNTTF9jbGVhbnNlCiAKIC5nbG9iYWwJT1BFTlNTTF93aXBlX2NwdQpAQCAtOTcsNDEgKzEzMyw1MyBAQCBPUEVOU1NMX3dpcGVfY3B1OgogCWVvcglpcCxpcCxpcAogCXRzdAlyMCwjMQogCWJlcQkuTHdpcGVfZG9uZQotCS53b3JkCTB4ZjMwMDAxNTAJQCB2ZW9yICAgIHEwLCBxMCwgcTAKLQkud29yZAkweGYzMDIyMTUyCUAgdmVvciAgICBxMSwgcTEsIHExCi0JLndvcmQJMHhmMzA0NDE1NAlAIHZlb3IgICAgcTIsIHEyLCBxMgotCS53b3JkCTB4ZjMwNjYxNTYJQCB2ZW9yICAgIHEzLCBxMywgcTMKLQkud29yZAkweGYzNDAwMWYwCUAgdmVvciAgICBxOCwgcTgsIHE4Ci0JLndvcmQJMHhmMzQyMjFmMglAIHZlb3IgICAgcTksIHE5LCBxOQotCS53b3JkCTB4ZjM0NDQxZjQJQCB2ZW9yICAgIHExMCwgcTEwLCBxMTAKLQkud29yZAkweGYzNDY2MWY2CUAgdmVvciAgICBxMTEsIHExMSwgcTExCi0JLndvcmQJMHhmMzQ4ODFmOAlAIHZlb3IgICAgcTEyLCBxMTIsIHExMgotCS53b3JkCTB4ZjM0YWExZmEJQCB2ZW9yICAgIHExMywgcTEzLCBxMTMKLQkud29yZAkweGYzNGNjMWZjCUAgdmVvciAgICBxMTQsIHExNCwgcTE0Ci0JLndvcmQJMHhmMzRlZTFmZQlAIHZlb3IgICAgcTE1LCBxMTUsIHExNQorCS5ieXRlCTB4NTAsMHgwMSwweDAwLDB4ZjMJQCB2ZW9yCXEwLCBxMCwgcTAKKwkuYnl0ZQkweDUyLDB4MjEsMHgwMiwweGYzCUAgdmVvcglxMSwgcTEsIHExCisJLmJ5dGUJMHg1NCwweDQxLDB4MDQsMHhmMwlAIHZlb3IJcTIsIHEyLCBxMgorCS5ieXRlCTB4NTYsMHg2MSwweDA2LDB4ZjMJQCB2ZW9yCXEzLCBxMywgcTMKKwkuYnl0ZQkweGYwLDB4MDEsMHg0MCwweGYzCUAgdmVvcglxOCwgcTgsIHE4CisJLmJ5dGUJMHhmMiwweDIxLDB4NDIsMHhmMwlAIHZlb3IJcTksIHE5LCBxOQorCS5ieXRlCTB4ZjQsMHg0MSwweDQ0LDB4ZjMJQCB2ZW9yCXExMCwgcTEwLCBxMTAKKwkuYnl0ZQkweGY2LDB4NjEsMHg0NiwweGYzCUAgdmVvcglxMTEsIHExMSwgcTExCisJLmJ5dGUJMHhmOCwweDgxLDB4NDgsMHhmMwlAIHZlb3IJcTEyLCBxMTIsIHExMgorCS5ieXRlCTB4ZmEsMHhhMSwweDRhLDB4ZjMJQCB2ZW9yCXExMywgcTEzLCBxMTMKKwkuYnl0ZQkweGZjLDB4YzEsMHg0YywweGYzCUAgdmVvcglxMTQsIHExNCwgcTE0CisJLmJ5dGUJMHhmZSwweGUxLDB4NGUsMHhmMwlAIHZlb3IJcTE0LCBxMTQsIHExNAogLkx3aXBlX2RvbmU6CiAJbW92CXIwLHNwCisjaWYgX19BUk1fQVJDSF9fPj01CisJYngJbHIKKyNlbHNlCiAJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIKIAkud29yZAkweGUxMmZmZjFlCUAgYngJbHIKKyNlbmRpZgogLnNpemUJT1BFTlNTTF93aXBlX2NwdSwuLU9QRU5TU0xfd2lwZV9jcHUKIAogLmdsb2JhbAlPUEVOU1NMX2luc3RydW1lbnRfYnVzCiAudHlwZQlPUEVOU1NMX2luc3RydW1lbnRfYnVzLCVmdW5jdGlvbgogT1BFTlNTTF9pbnN0cnVtZW50X2J1czoKIAllb3IJcjAscjAscjAKKyNpZiBfX0FSTV9BUkNIX18+PTUKKwlieAlscgorI2Vsc2UKIAl0c3QJbHIsIzEKIAltb3ZlcQlwYyxscgogCS53b3JkCTB4ZTEyZmZmMWUJQCBieAlscgorI2VuZGlmCiAuc2l6ZQlPUEVOU1NMX2luc3RydW1lbnRfYnVzLC4tT1BFTlNTTF9pbnN0cnVtZW50X2J1cwogCiAuZ2xvYmFsCU9QRU5TU0xfaW5zdHJ1bWVudF9idXMyCiAudHlwZQlPUEVOU1NMX2luc3RydW1lbnRfYnVzMiwlZnVuY3Rpb24KIE9QRU5TU0xfaW5zdHJ1bWVudF9idXMyOgogCWVvcglyMCxyMCxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NQorCWJ4CWxyCisjZWxzZQogCXRzdAlsciwjMQogCW1vdmVxCXBjLGxyCiAJLndvcmQJMHhlMTJmZmYxZQlAIGJ4CWxyCisjZW5kaWYKIC5zaXplCU9QRU5TU0xfaW5zdHJ1bWVudF9idXMyLC4tT1BFTlNTTF9pbnN0cnVtZW50X2J1czIKIAogLmFsaWduCTUKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9NYWtlZmlsZSBiL2NyeXB0by9ibi9NYWtlZmlsZQppbmRleCA2ZGQxMzZiLi5lZmZjNDA5IDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vTWFrZWZpbGUKKysrIGIvY3J5cHRvL2JuL01ha2VmaWxlCkBAIC0xMzAsOSArMTMwLDEwIEBAIGFscGhhLW1vbnQuczoJYXNtL2FscGhhLW1vbnQucGwKIAkkKENDKSAtRSAkJHByZXByb2MgPiAkQCAmJiBybSAkJHByZXByb2MpCiAKICMgR05VIG1ha2UgImNhdGNoIGFsbCIKLSUtbW9udC5zOglhc20vJS1tb250LnBsOwkkKFBFUkwpICQ8ICQoUEVSTEFTTV9TQ0hFTUUpICRACislLW1vbnQuUzoJYXNtLyUtbW9udC5wbDsJJChQRVJMKSAkPCAkKFBFUkxBU01fU0NIRU1FKSAkQAogJS1nZjJtLlM6CWFzbS8lLWdmMm0ucGw7CSQoUEVSTCkgJDwgJChQRVJMQVNNX1NDSEVNRSkgJEAKIAorYXJtdjQtbW9udC5vOglhcm12NC1tb250LlMKIGFybXY0LWdmMm0ubzoJYXJtdjQtZ2YybS5TCiAKIGZpbGVzOgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9hcm12NC1nZjJtLnBsIGIvY3J5cHRvL2JuL2FzbS9hcm12NC1nZjJtLnBsCmluZGV4IGM1MmUwYjcuLmI3ODFhZmIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9hc20vYXJtdjQtZ2YybS5wbAorKysgYi9jcnlwdG8vYm4vYXNtL2FybXY0LWdmMm0ucGwKQEAgLTIwLDE0ICsyMCwyMSBAQAogIyBsZW5ndGgsIG1vcmUgZm9yIGxvbmdlciBrZXlzLiBFdmVuIHRob3VnaCBORU9OIDF4MSBtdWx0aXBsaWNhdGlvbgogIyBydW5zIGluIGV2ZW4gbGVzcyBjeWNsZXMsIH4zMCwgaW1wcm92ZW1lbnQgaXMgbWVhc3VyYWJsZSBvbmx5IG9uCiAjIGxvbmdlciBrZXlzLiBPbmUgaGFzIHRvIG9wdGltaXplIGNvZGUgZWxzZXdoZXJlIHRvIGdldCBORU9OIGdsb3cuLi4KKyMKKyMgQXByaWwgMjAxNAorIworIyBEb3VibGUgYm5fR0YybV9tdWxfMngyIHBlcmZvcm1hbmNlIGJ5IHVzaW5nIGFsZ29yaXRobSBmcm9tIHBhcGVyCisjIHJlZmVycmVkIGJlbG93LCB3aGljaCBpbXByb3ZlcyBFQ0RIIGFuZCBFQ0RTQSB2ZXJpZnkgYmVuY2htYXJrcworIyBieSAxOC00MCUuCisjCisjIEPibWFyYSwgRC47IEdvdXbqYSwgQy4gUC4gTC47IEzzcGV6LCBKLiAmIERhaGFiLCBSLjogRmFzdCBTb2Z0d2FyZQorIyBQb2x5bm9taWFsIE11bHRpcGxpY2F0aW9uIG9uIEFSTSBQcm9jZXNzb3JzIHVzaW5nIHRoZSBORU9OIEVuZ2luZS4KKyMgCisjIGh0dHA6Ly9jb25yYWRvcGxnLmNyeXB0b2xhbmQubmV0L2ZpbGVzLzIwMTAvMTIvbW9jcnlzZW4xMy5wZGYKIAogd2hpbGUgKCgkb3V0cHV0PXNoaWZ0KSAmJiAoJG91dHB1dCF+L15cd1tcd1wtXSpcLlx3KyQvKSkge30KIG9wZW4gU1RET1VULCI+JG91dHB1dCI7CiAKLXN1YiBEbG8oKSAgIHsgc2hpZnQ9fm18cShbMV0/WzAtOV0pfD8iZCIuKCQxKjIpOiIiOyAgICAgfQotc3ViIERoaSgpICAgeyBzaGlmdD1+bXxxKFsxXT9bMC05XSl8PyJkIi4oJDEqMisxKToiIjsgICB9Ci1zdWIgUSgpICAgICB7IHNoaWZ0PX5tfGQoWzEtM10/WzAyNDY4XSl8PyJxIi4oJDEvMik6IiI7IH0KLQogJGNvZGU9PDxfX187CiAjaW5jbHVkZSAiYXJtX2FyY2guaCIKIApAQCAtMzYsMzEgKzQzLDYgQEAgJGNvZGU9PDxfX187CiAKICNpZiBfX0FSTV9BUkNIX18+PTcKIC5mcHUJbmVvbgotCi0udHlwZQltdWxfMXgxX25lb24sJWZ1bmN0aW9uCi0uYWxpZ24JNQotbXVsXzF4MV9uZW9uOgotCXZzaGwudTY0CWAmRGxvKCJxMSIpYCxkMTYsIzgJQCBxMS1xMyBhcmUgc2xpZGVkICRhCi0Jdm11bGwucDgJYCZRKCJkMCIpYCxkMTYsZDE3CUAgYbdiYgotCXZzaGwudTY0CWAmRGxvKCJxMiIpYCxkMTYsIzE2Ci0Jdm11bGwucDgJcTEsYCZEbG8oInExIilgLGQxNwlAIGE8PDi3YmIKLQl2c2hsLnU2NAlgJkRsbygicTMiKWAsZDE2LCMyNAotCXZtdWxsLnA4CXEyLGAmRGxvKCJxMiIpYCxkMTcJQCBhPDwxNrdiYgotCXZzaHIudTY0CWAmRGxvKCJxMSIpYCwjOAotCXZtdWxsLnA4CXEzLGAmRGxvKCJxMyIpYCxkMTcJQCBhPDwyNLdiYgotCXZzaGwudTY0CWAmRGhpKCJxMSIpYCwjMjQKLQl2ZW9yCQlkMCxgJkRsbygicTEiKWAKLQl2c2hyLnU2NAlgJkRsbygicTIiKWAsIzE2Ci0JdmVvcgkJZDAsYCZEaGkoInExIilgCi0JdnNobC51NjQJYCZEaGkoInEyIilgLCMxNgotCXZlb3IJCWQwLGAmRGxvKCJxMiIpYAotCXZzaHIudTY0CWAmRGxvKCJxMyIpYCwjMjQKLQl2ZW9yCQlkMCxgJkRoaSgicTIiKWAKLQl2c2hsLnU2NAlgJkRoaSgicTMiKWAsIzgKLQl2ZW9yCQlkMCxgJkRsbygicTMiKWAKLQl2ZW9yCQlkMCxgJkRoaSgicTMiKWAKLQlieAlscgotLnNpemUJbXVsXzF4MV9uZW9uLC4tbXVsXzF4MV9uZW9uCiAjZW5kaWYKIF9fXwogIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTU5LDggKzE0MSw5IEBAIF9fXwogIyB2b2lkCWJuX0dGMm1fbXVsXzJ4MihCTl9VTE9ORyAqciwKICMJQk5fVUxPTkcgYTEsQk5fVUxPTkcgYTAsCiAjCUJOX1VMT05HIGIxLEJOX1VMT05HIGIwKTsJIyByWzMuLjBdPWExYTC3YjFiMAotCi0oJEExLCRCMSwkQTAsJEIwLCRBMUIxLCRBMEIwKT1tYXAoImQkXyIsKDE4Li4yMykpOworeworbXkgKCRyLCR0MCwkdDEsJHQyLCR0Myk9bWFwKCJxJF8iLCgwLi4zLDguLjEyKSk7CitteSAoJGEsJGIsJGs0OCwkazMyLCRrMTYpPW1hcCgiZCRfIiwoMjYuLjMxKSk7CiAKICRjb2RlLj08PF9fXzsKIC5nbG9iYWwJYm5fR0YybV9tdWxfMngyCkBAIC0xNzMsNDQgKzE1Niw1OCBAQCBibl9HRjJtX211bF8yeDI6CiAJdHN0CXIxMiwjMQogCWJlcQkuTGlhbHUKIAotCXZlb3IJJEExLCRBMQotCXZtb3YuMzIJJEIxLHIzLHIzCQlAIHR3byBjb3BpZXMgb2YgYjEKLQl2bW92LjMyCSR7QTF9WzBdLHIxCQlAIGExCi0KLQl2ZW9yCSRBMCwkQTAKLQl2bGQxLjMyCSR7QjB9W10sW3NwLDozMl0JQCB0d28gY29waWVzIG9mIGIwCi0Jdm1vdi4zMgkke0EwfVswXSxyMgkJQCBhMAotCW1vdglyMTIsbHIKLQotCXZtb3YJZDE2LCRBMQotCXZtb3YJZDE3LCRCMQotCWJsCW11bF8xeDFfbmVvbgkJQCBhMbdiMQotCXZtb3YJJEExQjEsZDAKLQotCXZtb3YJZDE2LCRBMAotCXZtb3YJZDE3LCRCMAotCWJsCW11bF8xeDFfbmVvbgkJQCBhMLdiMAotCXZtb3YJJEEwQjAsZDAKLQotCXZlb3IJZDE2LCRBMCwkQTEKLQl2ZW9yCWQxNywkQjAsJEIxCi0JdmVvcgkkQTAsJEEwQjAsJEExQjEKLQlibAltdWxfMXgxX25lb24JCUAgKGEwK2ExKbcoYjArYjEpCi0KLQl2ZW9yCWQwLCRBMAkJCUAgKGEwK2ExKbcoYjArYjEpLWEwt2IwLWExt2IxCi0JdnNobC51NjQgZDEsZDAsIzMyCi0JdnNoci51NjQgZDAsZDAsIzMyCi0JdmVvcgkkQTBCMCxkMQotCXZlb3IJJEExQjEsZDAKLQl2c3QxLjMyCXske0EwQjB9WzBdfSxbcjAsOjMyXSEKLQl2c3QxLjMyCXske0EwQjB9WzFdfSxbcjAsOjMyXSEKLQl2c3QxLjMyCXske0ExQjF9WzBdfSxbcjAsOjMyXSEKLQl2c3QxLjMyCXske0ExQjF9WzFdfSxbcjAsOjMyXQotCWJ4CXIxMgorCWxkcgkJcjEyLCBbc3BdCQlAIDV0aCBhcmd1bWVudAorCXZtb3YuMzIJCSRhLCByMiwgcjEKKwl2bW92LjMyCQkkYiwgcjEyLCByMworCXZtb3YuaTY0CSRrNDgsICMweDAwMDBmZmZmZmZmZmZmZmYKKwl2bW92Lmk2NAkkazMyLCAjMHgwMDAwMDAwMGZmZmZmZmZmCisJdm1vdi5pNjQJJGsxNiwgIzB4MDAwMDAwMDAwMDAwZmZmZgorCisJdmV4dC44CQkkdDAjbG8sICRhLCAkYSwgIzEJQCBBMQorCXZtdWxsLnA4CSR0MCwgJHQwI2xvLCAkYgkJQCBGID0gQTEqQgorCXZleHQuOAkJJHIjbG8sICRiLCAkYiwgIzEJQCBCMQorCXZtdWxsLnA4CSRyLCAkYSwgJHIjbG8JCUAgRSA9IEEqQjEKKwl2ZXh0LjgJCSR0MSNsbywgJGEsICRhLCAjMglAIEEyCisJdm11bGwucDgJJHQxLCAkdDEjbG8sICRiCQlAIEggPSBBMipCCisJdmV4dC44CQkkdDMjbG8sICRiLCAkYiwgIzIJQCBCMgorCXZtdWxsLnA4CSR0MywgJGEsICR0MyNsbwkJQCBHID0gQSpCMgorCXZleHQuOAkJJHQyI2xvLCAkYSwgJGEsICMzCUAgQTMKKwl2ZW9yCQkkdDAsICR0MCwgJHIJCUAgTCA9IEUgKyBGCisJdm11bGwucDgJJHQyLCAkdDIjbG8sICRiCQlAIEogPSBBMypCCisJdmV4dC44CQkkciNsbywgJGIsICRiLCAjMwlAIEIzCisJdmVvcgkJJHQxLCAkdDEsICR0MwkJQCBNID0gRyArIEgKKwl2bXVsbC5wOAkkciwgJGEsICRyI2xvCQlAIEkgPSBBKkIzCisJdmVvcgkJJHQwI2xvLCAkdDAjbG8sICR0MCNoaQlAIHQwID0gKEwpIChQMCArIFAxKSA8PCA4CisJdmFuZAkJJHQwI2hpLCAkdDAjaGksICRrNDgKKwl2ZXh0LjgJCSR0MyNsbywgJGIsICRiLCAjNAlAIEI0CisJdmVvcgkJJHQxI2xvLCAkdDEjbG8sICR0MSNoaQlAIHQxID0gKE0pIChQMiArIFAzKSA8PCAxNgorCXZhbmQJCSR0MSNoaSwgJHQxI2hpLCAkazMyCisJdm11bGwucDgJJHQzLCAkYSwgJHQzI2xvCQlAIEsgPSBBKkI0CisJdmVvcgkJJHQyLCAkdDIsICRyCQlAIE4gPSBJICsgSgorCXZlb3IJCSR0MCNsbywgJHQwI2xvLCAkdDAjaGkKKwl2ZW9yCQkkdDEjbG8sICR0MSNsbywgJHQxI2hpCisJdmVvcgkJJHQyI2xvLCAkdDIjbG8sICR0MiNoaQlAIHQyID0gKE4pIChQNCArIFA1KSA8PCAyNAorCXZhbmQJCSR0MiNoaSwgJHQyI2hpLCAkazE2CisJdmV4dC44CQkkdDAsICR0MCwgJHQwLCAjMTUKKwl2ZW9yCQkkdDMjbG8sICR0MyNsbywgJHQzI2hpCUAgdDMgPSAoSykgKFA2ICsgUDcpIDw8IDMyCisJdm1vdi5pNjQJJHQzI2hpLCAjMAorCXZleHQuOAkJJHQxLCAkdDEsICR0MSwgIzE0CisJdmVvcgkJJHQyI2xvLCAkdDIjbG8sICR0MiNoaQorCXZtdWxsLnA4CSRyLCAkYSwgJGIJCUAgRCA9IEEqQgorCXZleHQuOAkJJHQzLCAkdDMsICR0MywgIzEyCisJdmV4dC44CQkkdDIsICR0MiwgJHQyLCAjMTMKKwl2ZW9yCQkkdDAsICR0MCwgJHQxCisJdmVvcgkJJHQyLCAkdDIsICR0MworCXZlb3IJCSRyLCAkciwgJHQwCisJdmVvcgkJJHIsICRyLCAkdDIKKworCXZzdDEuMzIJCXskcn0sIFtyMF0KKwlyZXQJCUAgYnggbHIKIC5hbGlnbgk0CiAuTGlhbHU6CiAjZW5kaWYKIF9fXworfQogJHJldD0icjEwIjsJIyByZWFzc2lnbmVkIDFzdCBhcmd1bWVudAogJGNvZGUuPTw8X19fOwogCXN0bWRiCXNwISx7cjQtcjEwLGxyfQpAQCAtMjcyLDcgKzI2OSwxMyBAQCAkY29kZS49PDxfX187CiAuY29tbQlPUEVOU1NMX2FybWNhcF9QLDQsNAogX19fCiAKLSRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOwotJGNvZGUgPX4gcy9cYmJ4XHMrbHJcYi8ud29yZFx0MHhlMTJmZmYxZS9nbTsgICAgIyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCAtbWFyY2g9YXJtdjQKLXByaW50ICRjb2RlOworZm9yZWFjaCAoc3BsaXQoIlxuIiwkY29kZSkpIHsKKwlzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbzsKKworCXMvXGJxKFswLTldKykjKGxvfGhpKS9zcHJpbnRmICJkJWQiLDIqJDErKCQyIGVxICJoaSIpL2dlbwlvcgorCXMvXGJyZXRcYi9ieAlsci9nbwkJb3IKKwlzL1xiYnhccytsclxiLy53b3JkXHQweGUxMmZmZjFlL2dvOyAgICAjIG1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoIC1tYXJjaD1hcm12NAorCisJcHJpbnQgJF8sIlxuIjsKK30KIGNsb3NlIFNURE9VVDsgICAjIGVuZm9yY2UgZmx1c2gKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5wbCBiL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5wbAppbmRleCBmNzhhOGI1Li43MmJhZDhlIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYXNtL2FybXY0LW1vbnQucGwKKysrIGIvY3J5cHRvL2JuL2FzbS9hcm12NC1tb250LnBsCkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jpbi9lbnYgcGVybAogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKICMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAogIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgogIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KQEAgLTIzLDYgKzIzLDIxIEBACiAjIHRoYW4gMS8yS0IuIFdpbmRvd3MgQ0UgcG9ydCB3b3VsZCBiZSB0cml2aWFsLCBhcyBpdCdzIGV4Y2x1c2l2ZWx5CiAjIGFib3V0IGRlY29yYXRpb25zLCBBQkkgYW5kIGluc3RydWN0aW9uIHN5bnRheCBhcmUgaWRlbnRpY2FsLgogCisjIE5vdmVtYmVyIDIwMTMKKyMKKyMgQWRkIE5FT04gY29kZSBwYXRoLCB3aGljaCBoYW5kbGVzIGxlbmd0aHMgZGl2aXNpYmxlIGJ5IDguIFJTQS9EU0EKKyMgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gQ29ydGV4LUE4IGlzIH40NS0xMDAlIGRlcGVuZGluZyBvbiBrZXkKKyMgbGVuZ3RoLCBtb3JlIGZvciBsb25nZXIga2V5cy4gT24gQ29ydGV4LUExNSB0aGUgc3BhbiBpcyB+MTAtMTA1JS4KKyMgT24gU25hcGRyYWdvbiBTNCBpbXByb3ZlbWVudCB3YXMgbWVhc3VyZWQgdG8gdmFyeSBmcm9tIH43MCUgdG8KKyMgaW5jcmVkaWJsZSB+MzgwJSwgeWVzLCA0Ljh4IGZhc3RlciwgZm9yIFJTQTQwOTYgc2lnbi4gQnV0IHRoaXMgaXMKKyMgcmF0aGVyIGJlY2F1c2Ugb3JpZ2luYWwgaW50ZWdlci1vbmx5IGNvZGUgc2VlbXMgdG8gcGVyZm9ybQorIyBzdWJvcHRpbWFsbHkgb24gUzQuIFNpdHVhdGlvbiBvbiBDb3J0ZXgtQTkgaXMgdW5mb3J0dW5hdGVseQorIyBkaWZmZXJlbnQuIEl0J3MgYmVpbmcgbG9va2VkIGludG8sIGJ1dCB0aGUgdHJvdWJsZSBpcyB0aGF0CisjIHBlcmZvcm1hbmNlIGZvciB2ZWN0b3JzIGxvbmdlciB0aGFuIDI1NiBiaXRzIGlzIGFjdHVhbGx5IGNvdXBsZQorIyBvZiBwZXJjZW50IHdvcnNlIHRoYW4gZm9yIGludGVnZXItb25seSBjb2RlLiBUaGUgY29kZSBpcyBjaG9zZW4KKyMgZm9yIGV4ZWN1dGlvbiBvbiBhbGwgTkVPTi1jYXBhYmxlIHByb2Nlc3NvcnMsIGJlY2F1c2UgZ2FpbiBvbgorIyBvdGhlcnMgb3V0d2VpZ2hzIHRoZSBtYXJnaW5hbCBsb3NzIG9uIENvcnRleC1BOS4KKwogd2hpbGUgKCgkb3V0cHV0PXNoaWZ0KSAmJiAoJG91dHB1dCF+L15cd1tcd1wtXSpcLlx3KyQvKSkge30KIG9wZW4gU1RET1VULCI+JG91dHB1dCI7CiAKQEAgLTUyLDE2ICs2Nyw0MCBAQCAkX24wPSIkbnVtLCMxNCo0IjsKICRfbnVtPSIkbnVtLCMxNSo0IjsJJF9icGVuZD0kX251bTsKIAogJGNvZGU9PDxfX187CisjaW5jbHVkZSAiYXJtX2FyY2guaCIKKwogLnRleHQKKy5jb2RlCTMyCisKKyNpZiBfX0FSTV9BUkNIX18+PTcKKy5hbGlnbgk1CisuTE9QRU5TU0xfYXJtY2FwOgorLndvcmQJT1BFTlNTTF9hcm1jYXBfUC1ibl9tdWxfbW9udAorI2VuZGlmCiAKIC5nbG9iYWwJYm5fbXVsX21vbnQKIC50eXBlCWJuX211bF9tb250LCVmdW5jdGlvbgogCi0uYWxpZ24JMgorLmFsaWduCTUKIGJuX211bF9tb250OgorCWxkcglpcCxbc3AsIzRdCQlAIGxvYWQgbnVtCiAJc3RtZGIJc3AhLHtyMCxyMn0JCUAgc3AgcG9pbnRzIGF0IGFyZ3VtZW50IGJsb2NrCi0JbGRyCSRudW0sW3NwLCMzKjRdCQlAIGxvYWQgbnVtCi0JY21wCSRudW0sIzIKKyNpZiBfX0FSTV9BUkNIX18+PTcKKwl0c3QJaXAsIzcKKwlibmUJLkxpYWx1CisJYWRyCXIwLGJuX211bF9tb250CisJbGRyCXIyLC5MT1BFTlNTTF9hcm1jYXAKKwlsZHIJcjAsW3IwLHIyXQorCXRzdAlyMCwjMQkJCUAgTkVPTiBhdmFpbGFibGU/CisJbGRtaWEJc3AsIHtyMCxyMn0KKwliZXEJLkxpYWx1CisJYWRkCXNwLHNwLCM4CisJYglibl9tdWw4eF9tb250X25lb24KKy5hbGlnbgk0CisuTGlhbHU6CisjZW5kaWYKKwljbXAJaXAsIzIKKwltb3YJJG51bSxpcAkJCUAgbG9hZCBudW0KIAltb3ZsdAlyMCwjMAogCWFkZGx0CXNwLHNwLCMyKjQKIAlibHQJLkxhYnJ0CkBAIC0xOTEsMTQgKzIzMCw0NDYgQEAgYm5fbXVsX21vbnQ6CiAJbGRtaWEJc3AhLHtyNC1yMTIsbHJ9CQlAIHJlc3RvcmUgcmVnaXN0ZXJzCiAJYWRkCXNwLHNwLCMyKjQJCUAgc2tpcCBvdmVyIHtyMCxyMn0KIAltb3YJcjAsIzEKLS5MYWJydDoJdHN0CWxyLCMxCisuTGFicnQ6CisjaWYgX19BUk1fQVJDSF9fPj01CisJcmV0CQkJCUAgYnggbHIKKyNlbHNlCisJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAogCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCisjZW5kaWYKIC5zaXplCWJuX211bF9tb250LC4tYm5fbXVsX21vbnQKLS5hc2NpegkiTW9udGdvbWVyeSBtdWx0aXBsaWNhdGlvbiBmb3IgQVJNdjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KK3sKK3N1YiBEbG8oKSAgIHsgc2hpZnQ9fm18cShbMV0/WzAtOV0pfD8iZCIuKCQxKjIpOiIiOyAgICAgfQorc3ViIERoaSgpICAgeyBzaGlmdD1+bXxxKFsxXT9bMC05XSl8PyJkIi4oJDEqMisxKToiIjsgICB9CisKK215ICgkQTAsJEExLCRBMiwkQTMpPW1hcCgiZCRfIiwoMC4uMykpOworbXkgKCROMCwkTjEsJE4yLCROMyk9bWFwKCJkJF8iLCg0Li43KSk7CitteSAoJFosJFRlbXApPSgicTQiLCJxNSIpOworbXkgKCRBMHhCLCRBMXhCLCRBMnhCLCRBM3hCLCRBNHhCLCRBNXhCLCRBNnhCLCRBN3hCKT1tYXAoInEkXyIsKDYuLjEzKSk7CitteSAoJEJpLCROaSwkTTApPW1hcCgiZCRfIiwoMjguLjMxKSk7CitteSAkemVybz0mRGxvKCRaKTsKK215ICR0ZW1wPSZEbG8oJFRlbXApOworCitteSAoJHJwdHIsJGFwdHIsJGJwdHIsJG5wdHIsJG4wLCRudW0pPW1hcCgiciRfIiwoMC4uNSkpOworbXkgKCR0aW5wdHIsJHRvdXRwdHIsJGlubmVyLCRvdXRlcik9bWFwKCJyJF8iLCg2Li45KSk7CisKKyRjb2RlLj08PF9fXzsKKyNpZiBfX0FSTV9BUkNIX18+PTcKKy5mcHUJbmVvbgorCisudHlwZQlibl9tdWw4eF9tb250X25lb24sJWZ1bmN0aW9uCisuYWxpZ24JNQorYm5fbXVsOHhfbW9udF9uZW9uOgorCW1vdglpcCxzcAorCXN0bWRiCXNwISx7cjQtcjExfQorCXZzdG1kYglzcCEse2Q4LWQxNX0JCUAgQUJJIHNwZWNpZmljYXRpb24gc2F5cyBzbworCWxkbWlhCWlwLHtyNC1yNX0JCUAgbG9hZCByZXN0IG9mIHBhcmFtZXRlciBibG9jaworCisJc3ViCQkkdG91dHB0cixzcCwjMTYKKwl2bGQxLjMyCQl7JHtCaX1bMF19LCBbJGJwdHIsOjMyXSEKKwlzdWIJCSR0b3V0cHRyLCR0b3V0cHRyLCRudW0sbHNsIzQKKwl2bGQxLjMyCQl7JEEwLSRBM30sICBbJGFwdHJdIQkJQCBjYW4ndCBzcGVjaWZ5IDozMiA6LSgKKwlhbmQJCSR0b3V0cHRyLCR0b3V0cHRyLCMtNjQKKwl2bGQxLjMyCQl7JHtNMH1bMF19LCBbJG4wLDozMl0KKwltb3YJCXNwLCR0b3V0cHRyCQkJQCBhbGxvY2EKKwl2ZW9yCQkkemVybywkemVybywkemVybworCXN1YnMJCSRpbm5lciwkbnVtLCM4CisJdnppcC4xNgkJJEJpLCR6ZXJvCisKKwl2bXVsbC51MzIJJEEweEIsJEJpLCR7QTB9WzBdCisJdm11bGwudTMyCSRBMXhCLCRCaSwke0EwfVsxXQorCXZtdWxsLnUzMgkkQTJ4QiwkQmksJHtBMX1bMF0KKwl2c2hsLmk2NAkkdGVtcCxgJkRoaSgiJEEweEIiKWAsIzE2CisJdm11bGwudTMyCSRBM3hCLCRCaSwke0ExfVsxXQorCisJdmFkZC51NjQJJHRlbXAsJHRlbXAsYCZEbG8oIiRBMHhCIilgCisJdmVvcgkJJHplcm8sJHplcm8sJHplcm8KKwl2bXVsLnUzMgkkTmksJHRlbXAsJE0wCisKKwl2bXVsbC51MzIJJEE0eEIsJEJpLCR7QTJ9WzBdCisJIHZsZDEuMzIJeyROMC0kTjN9LCBbJG5wdHJdIQorCXZtdWxsLnUzMgkkQTV4QiwkQmksJHtBMn1bMV0KKwl2bXVsbC51MzIJJEE2eEIsJEJpLCR7QTN9WzBdCisJdnppcC4xNgkJJE5pLCR6ZXJvCisJdm11bGwudTMyCSRBN3hCLCRCaSwke0EzfVsxXQorCisJYm5lCS5MTkVPTl8xc3QKKworCUAgc3BlY2lhbCBjYXNlIGZvciBudW09OCwgZXZlcnl0aGluZyBpcyBpbiByZWdpc3RlciBiYW5rLi4uCisKKwl2bWxhbC51MzIJJEEweEIsJE5pLCR7TjB9WzBdCisJc3ViCQkkb3V0ZXIsJG51bSwjMQorCXZtbGFsLnUzMgkkQTF4QiwkTmksJHtOMH1bMV0KKwl2bWxhbC51MzIJJEEyeEIsJE5pLCR7TjF9WzBdCisJdm1sYWwudTMyCSRBM3hCLCROaSwke04xfVsxXQorCisJdm1sYWwudTMyCSRBNHhCLCROaSwke04yfVswXQorCXZtb3YJCSRUZW1wLCRBMHhCCisJdm1sYWwudTMyCSRBNXhCLCROaSwke04yfVsxXQorCXZtb3YJCSRBMHhCLCRBMXhCCisJdm1sYWwudTMyCSRBNnhCLCROaSwke04zfVswXQorCXZtb3YJCSRBMXhCLCRBMnhCCisJdm1sYWwudTMyCSRBN3hCLCROaSwke04zfVsxXQorCXZtb3YJCSRBMnhCLCRBM3hCCisJdm1vdgkJJEEzeEIsJEE0eEIKKwl2c2hyLnU2NAkkdGVtcCwkdGVtcCwjMTYKKwl2bW92CQkkQTR4QiwkQTV4QgorCXZtb3YJCSRBNXhCLCRBNnhCCisJdmFkZC51NjQJJHRlbXAsJHRlbXAsYCZEaGkoIiRUZW1wIilgCisJdm1vdgkJJEE2eEIsJEE3eEIKKwl2ZW9yCQkkQTd4QiwkQTd4QgorCXZzaHIudTY0CSR0ZW1wLCR0ZW1wLCMxNgorCisJYgkuTE5FT05fb3V0ZXI4CisKKy5hbGlnbgk0CisuTE5FT05fb3V0ZXI4OgorCXZsZDEuMzIJCXske0JpfVswXX0sIFskYnB0ciw6MzJdIQorCXZlb3IJCSR6ZXJvLCR6ZXJvLCR6ZXJvCisJdnppcC4xNgkJJEJpLCR6ZXJvCisJdmFkZC51NjQJYCZEbG8oIiRBMHhCIilgLGAmRGxvKCIkQTB4QiIpYCwkdGVtcAorCisJdm1sYWwudTMyCSRBMHhCLCRCaSwke0EwfVswXQorCXZtbGFsLnUzMgkkQTF4QiwkQmksJHtBMH1bMV0KKwl2bWxhbC51MzIJJEEyeEIsJEJpLCR7QTF9WzBdCisJdnNobC5pNjQJJHRlbXAsYCZEaGkoIiRBMHhCIilgLCMxNgorCXZtbGFsLnUzMgkkQTN4QiwkQmksJHtBMX1bMV0KKworCXZhZGQudTY0CSR0ZW1wLCR0ZW1wLGAmRGxvKCIkQTB4QiIpYAorCXZlb3IJCSR6ZXJvLCR6ZXJvLCR6ZXJvCisJc3VicwkJJG91dGVyLCRvdXRlciwjMQorCXZtdWwudTMyCSROaSwkdGVtcCwkTTAKKworCXZtbGFsLnUzMgkkQTR4QiwkQmksJHtBMn1bMF0KKwl2bWxhbC51MzIJJEE1eEIsJEJpLCR7QTJ9WzFdCisJdm1sYWwudTMyCSRBNnhCLCRCaSwke0EzfVswXQorCXZ6aXAuMTYJCSROaSwkemVybworCXZtbGFsLnUzMgkkQTd4QiwkQmksJHtBM31bMV0KKworCXZtbGFsLnUzMgkkQTB4QiwkTmksJHtOMH1bMF0KKwl2bWxhbC51MzIJJEExeEIsJE5pLCR7TjB9WzFdCisJdm1sYWwudTMyCSRBMnhCLCROaSwke04xfVswXQorCXZtbGFsLnUzMgkkQTN4QiwkTmksJHtOMX1bMV0KKworCXZtbGFsLnUzMgkkQTR4QiwkTmksJHtOMn1bMF0KKwl2bW92CQkkVGVtcCwkQTB4QgorCXZtbGFsLnUzMgkkQTV4QiwkTmksJHtOMn1bMV0KKwl2bW92CQkkQTB4QiwkQTF4QgorCXZtbGFsLnUzMgkkQTZ4QiwkTmksJHtOM31bMF0KKwl2bW92CQkkQTF4QiwkQTJ4QgorCXZtbGFsLnUzMgkkQTd4QiwkTmksJHtOM31bMV0KKwl2bW92CQkkQTJ4QiwkQTN4QgorCXZtb3YJCSRBM3hCLCRBNHhCCisJdnNoci51NjQJJHRlbXAsJHRlbXAsIzE2CisJdm1vdgkJJEE0eEIsJEE1eEIKKwl2bW92CQkkQTV4QiwkQTZ4QgorCXZhZGQudTY0CSR0ZW1wLCR0ZW1wLGAmRGhpKCIkVGVtcCIpYAorCXZtb3YJCSRBNnhCLCRBN3hCCisJdmVvcgkJJEE3eEIsJEE3eEIKKwl2c2hyLnU2NAkkdGVtcCwkdGVtcCwjMTYKKworCWJuZQkuTE5FT05fb3V0ZXI4CisKKwl2YWRkLnU2NAlgJkRsbygiJEEweEIiKWAsYCZEbG8oIiRBMHhCIilgLCR0ZW1wCisJbW92CQkkdG91dHB0cixzcAorCXZzaHIudTY0CSR0ZW1wLGAmRGxvKCIkQTB4QiIpYCwjMTYKKwltb3YJCSRpbm5lciwkbnVtCisJdmFkZC51NjQJYCZEaGkoIiRBMHhCIilgLGAmRGhpKCIkQTB4QiIpYCwkdGVtcAorCWFkZAkJJHRpbnB0cixzcCwjMTYKKwl2c2hyLnU2NAkkdGVtcCxgJkRoaSgiJEEweEIiKWAsIzE2CisJdnppcC4xNgkJYCZEbG8oIiRBMHhCIilgLGAmRGhpKCIkQTB4QiIpYAorCisJYgkuTE5FT05fdGFpbDIKKworLmFsaWduCTQKKy5MTkVPTl8xc3Q6CisJdm1sYWwudTMyCSRBMHhCLCROaSwke04wfVswXQorCSB2bGQxLjMyCXskQTAtJEEzfSwgWyRhcHRyXSEKKwl2bWxhbC51MzIJJEExeEIsJE5pLCR7TjB9WzFdCisJc3VicwkJJGlubmVyLCRpbm5lciwjOAorCXZtbGFsLnUzMgkkQTJ4QiwkTmksJHtOMX1bMF0KKwl2bWxhbC51MzIJJEEzeEIsJE5pLCR7TjF9WzFdCisKKwl2bWxhbC51MzIJJEE0eEIsJE5pLCR7TjJ9WzBdCisJIHZsZDEuMzIJeyROMC0kTjF9LCBbJG5wdHJdIQorCXZtbGFsLnUzMgkkQTV4QiwkTmksJHtOMn1bMV0KKwkgdnN0MS42NAl7JEEweEItJEExeEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisJdm1sYWwudTMyCSRBNnhCLCROaSwke04zfVswXQorCXZtbGFsLnUzMgkkQTd4QiwkTmksJHtOM31bMV0KKwkgdnN0MS42NAl7JEEyeEItJEEzeEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisKKwl2bXVsbC51MzIJJEEweEIsJEJpLCR7QTB9WzBdCisJIHZsZDEuMzIJeyROMi0kTjN9LCBbJG5wdHJdIQorCXZtdWxsLnUzMgkkQTF4QiwkQmksJHtBMH1bMV0KKwkgdnN0MS42NAl7JEE0eEItJEE1eEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisJdm11bGwudTMyCSRBMnhCLCRCaSwke0ExfVswXQorCXZtdWxsLnUzMgkkQTN4QiwkQmksJHtBMX1bMV0KKwkgdnN0MS42NAl7JEE2eEItJEE3eEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisKKwl2bXVsbC51MzIJJEE0eEIsJEJpLCR7QTJ9WzBdCisJdm11bGwudTMyCSRBNXhCLCRCaSwke0EyfVsxXQorCXZtdWxsLnUzMgkkQTZ4QiwkQmksJHtBM31bMF0KKwl2bXVsbC51MzIJJEE3eEIsJEJpLCR7QTN9WzFdCisKKwlibmUJLkxORU9OXzFzdAorCisJdm1sYWwudTMyCSRBMHhCLCROaSwke04wfVswXQorCWFkZAkJJHRpbnB0cixzcCwjMTYKKwl2bWxhbC51MzIJJEExeEIsJE5pLCR7TjB9WzFdCisJc3ViCQkkYXB0ciwkYXB0ciwkbnVtLGxzbCMyCQlAIHJld2luZCAkYXB0cgorCXZtbGFsLnUzMgkkQTJ4QiwkTmksJHtOMX1bMF0KKwkgdmxkMS42NAl7JFRlbXB9LCBbc3AsOjEyOF0KKwl2bWxhbC51MzIJJEEzeEIsJE5pLCR7TjF9WzFdCisJc3ViCQkkb3V0ZXIsJG51bSwjMQorCisJdm1sYWwudTMyCSRBNHhCLCROaSwke04yfVswXQorCXZzdDEuNjQJCXskQTB4Qi0kQTF4Qn0sIFskdG91dHB0ciw6MjU2XSEKKwl2bWxhbC51MzIJJEE1eEIsJE5pLCR7TjJ9WzFdCisJdnNoci51NjQJJHRlbXAsJHRlbXAsIzE2CisJIHZsZDEuNjQJeyRBMHhCfSwgICAgICAgWyR0aW5wdHIsIDoxMjhdIQorCXZtbGFsLnUzMgkkQTZ4QiwkTmksJHtOM31bMF0KKwl2c3QxLjY0CQl7JEEyeEItJEEzeEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisJdm1sYWwudTMyCSRBN3hCLCROaSwke04zfVsxXQorCisJdnN0MS42NAkJeyRBNHhCLSRBNXhCfSwgWyR0b3V0cHRyLDoyNTZdIQorCXZhZGQudTY0CSR0ZW1wLCR0ZW1wLGAmRGhpKCIkVGVtcCIpYAorCXZlb3IJCSRaLCRaLCRaCisJdnN0MS42NAkJeyRBNnhCLSRBN3hCfSwgWyR0b3V0cHRyLDoyNTZdIQorCSB2bGQxLjY0CXskQTF4Qi0kQTJ4Qn0sIFskdGlucHRyLCA6MjU2XSEKKwl2c3QxLjY0CQl7JFp9LCAgICAgICAgICBbJHRvdXRwdHIsOjEyOF0KKwl2c2hyLnU2NAkkdGVtcCwkdGVtcCwjMTYKKworCWIJCS5MTkVPTl9vdXRlcgorCisuYWxpZ24JNAorLkxORU9OX291dGVyOgorCXZsZDEuMzIJCXske0JpfVswXX0sIFskYnB0ciw6MzJdIQorCXN1YgkJJG5wdHIsJG5wdHIsJG51bSxsc2wjMgkJQCByZXdpbmQgJG5wdHIKKwl2bGQxLjMyCQl7JEEwLSRBM30sICBbJGFwdHJdIQorCXZlb3IJCSR6ZXJvLCR6ZXJvLCR6ZXJvCisJbW92CQkkdG91dHB0cixzcAorCXZ6aXAuMTYJCSRCaSwkemVybworCXN1YgkJJGlubmVyLCRudW0sIzgKKwl2YWRkLnU2NAlgJkRsbygiJEEweEIiKWAsYCZEbG8oIiRBMHhCIilgLCR0ZW1wCisKKwl2bWxhbC51MzIJJEEweEIsJEJpLCR7QTB9WzBdCisJIHZsZDEuNjQJeyRBM3hCLSRBNHhCfSxbJHRpbnB0ciw6MjU2XSEKKwl2bWxhbC51MzIJJEExeEIsJEJpLCR7QTB9WzFdCisJdm1sYWwudTMyCSRBMnhCLCRCaSwke0ExfVswXQorCSB2bGQxLjY0CXskQTV4Qi0kQTZ4Qn0sWyR0aW5wdHIsOjI1Nl0hCisJdm1sYWwudTMyCSRBM3hCLCRCaSwke0ExfVsxXQorCisJdnNobC5pNjQJJHRlbXAsYCZEaGkoIiRBMHhCIilgLCMxNgorCXZlb3IJCSR6ZXJvLCR6ZXJvLCR6ZXJvCisJdmFkZC51NjQJJHRlbXAsJHRlbXAsYCZEbG8oIiRBMHhCIilgCisJIHZsZDEuNjQJeyRBN3hCfSxbJHRpbnB0ciw6MTI4XSEKKwl2bXVsLnUzMgkkTmksJHRlbXAsJE0wCisKKwl2bWxhbC51MzIJJEE0eEIsJEJpLCR7QTJ9WzBdCisJIHZsZDEuMzIJeyROMC0kTjN9LCBbJG5wdHJdIQorCXZtbGFsLnUzMgkkQTV4QiwkQmksJHtBMn1bMV0KKwl2bWxhbC51MzIJJEE2eEIsJEJpLCR7QTN9WzBdCisJdnppcC4xNgkJJE5pLCR6ZXJvCisJdm1sYWwudTMyCSRBN3hCLCRCaSwke0EzfVsxXQorCisuTE5FT05faW5uZXI6CisJdm1sYWwudTMyCSRBMHhCLCROaSwke04wfVswXQorCSB2bGQxLjMyCXskQTAtJEEzfSwgWyRhcHRyXSEKKwl2bWxhbC51MzIJJEExeEIsJE5pLCR7TjB9WzFdCisJIHN1YnMJCSRpbm5lciwkaW5uZXIsIzgKKwl2bWxhbC51MzIJJEEyeEIsJE5pLCR7TjF9WzBdCisJdm1sYWwudTMyCSRBM3hCLCROaSwke04xfVsxXQorCXZzdDEuNjQJCXskQTB4Qi0kQTF4Qn0sIFskdG91dHB0ciw6MjU2XSEKKworCXZtbGFsLnUzMgkkQTR4QiwkTmksJHtOMn1bMF0KKwkgdmxkMS42NAl7JEEweEJ9LCAgICAgICBbJHRpbnB0ciwgOjEyOF0hCisJdm1sYWwudTMyCSRBNXhCLCROaSwke04yfVsxXQorCXZzdDEuNjQJCXskQTJ4Qi0kQTN4Qn0sIFskdG91dHB0ciw6MjU2XSEKKwl2bWxhbC51MzIJJEE2eEIsJE5pLCR7TjN9WzBdCisJIHZsZDEuNjQJeyRBMXhCLSRBMnhCfSwgWyR0aW5wdHIsIDoyNTZdIQorCXZtbGFsLnUzMgkkQTd4QiwkTmksJHtOM31bMV0KKwl2c3QxLjY0CQl7JEE0eEItJEE1eEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisKKwl2bWxhbC51MzIJJEEweEIsJEJpLCR7QTB9WzBdCisJIHZsZDEuNjQJeyRBM3hCLSRBNHhCfSwgWyR0aW5wdHIsIDoyNTZdIQorCXZtbGFsLnUzMgkkQTF4QiwkQmksJHtBMH1bMV0KKwl2c3QxLjY0CQl7JEE2eEItJEE3eEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisJdm1sYWwudTMyCSRBMnhCLCRCaSwke0ExfVswXQorCSB2bGQxLjY0CXskQTV4Qi0kQTZ4Qn0sIFskdGlucHRyLCA6MjU2XSEKKwl2bWxhbC51MzIJJEEzeEIsJEJpLCR7QTF9WzFdCisJIHZsZDEuMzIJeyROMC0kTjN9LCBbJG5wdHJdIQorCisJdm1sYWwudTMyCSRBNHhCLCRCaSwke0EyfVswXQorCSB2bGQxLjY0CXskQTd4Qn0sICAgICAgIFskdGlucHRyLCA6MTI4XSEKKwl2bWxhbC51MzIJJEE1eEIsJEJpLCR7QTJ9WzFdCisJdm1sYWwudTMyCSRBNnhCLCRCaSwke0EzfVswXQorCXZtbGFsLnUzMgkkQTd4QiwkQmksJHtBM31bMV0KKworCWJuZQkuTE5FT05faW5uZXIKKworCXZtbGFsLnUzMgkkQTB4QiwkTmksJHtOMH1bMF0KKwlhZGQJCSR0aW5wdHIsc3AsIzE2CisJdm1sYWwudTMyCSRBMXhCLCROaSwke04wfVsxXQorCXN1YgkJJGFwdHIsJGFwdHIsJG51bSxsc2wjMgkJQCByZXdpbmQgJGFwdHIKKwl2bWxhbC51MzIJJEEyeEIsJE5pLCR7TjF9WzBdCisJIHZsZDEuNjQJeyRUZW1wfSwgW3NwLDoxMjhdCisJdm1sYWwudTMyCSRBM3hCLCROaSwke04xfVsxXQorCXN1YnMJCSRvdXRlciwkb3V0ZXIsIzEKKworCXZtbGFsLnUzMgkkQTR4QiwkTmksJHtOMn1bMF0KKwl2c3QxLjY0CQl7JEEweEItJEExeEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisJdm1sYWwudTMyCSRBNXhCLCROaSwke04yfVsxXQorCSB2bGQxLjY0CXskQTB4Qn0sICAgICAgIFskdGlucHRyLCA6MTI4XSEKKwl2c2hyLnU2NAkkdGVtcCwkdGVtcCwjMTYKKwl2c3QxLjY0CQl7JEEyeEItJEEzeEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisJdm1sYWwudTMyCSRBNnhCLCROaSwke04zfVswXQorCSB2bGQxLjY0CXskQTF4Qi0kQTJ4Qn0sIFskdGlucHRyLCA6MjU2XSEKKwl2bWxhbC51MzIJJEE3eEIsJE5pLCR7TjN9WzFdCisKKwl2c3QxLjY0CQl7JEE0eEItJEE1eEJ9LCBbJHRvdXRwdHIsOjI1Nl0hCisJdmFkZC51NjQJJHRlbXAsJHRlbXAsYCZEaGkoIiRUZW1wIilgCisJdnN0MS42NAkJeyRBNnhCLSRBN3hCfSwgWyR0b3V0cHRyLDoyNTZdIQorCXZzaHIudTY0CSR0ZW1wLCR0ZW1wLCMxNgorCisJYm5lCS5MTkVPTl9vdXRlcgorCisJbW92CQkkdG91dHB0cixzcAorCW1vdgkJJGlubmVyLCRudW0KKworLkxORU9OX3RhaWw6CisJdmFkZC51NjQJYCZEbG8oIiRBMHhCIilgLGAmRGxvKCIkQTB4QiIpYCwkdGVtcAorCXZsZDEuNjQJCXskQTN4Qi0kQTR4Qn0sIFskdGlucHRyLCA6MjU2XSEKKwl2c2hyLnU2NAkkdGVtcCxgJkRsbygiJEEweEIiKWAsIzE2CisJdmFkZC51NjQJYCZEaGkoIiRBMHhCIilgLGAmRGhpKCIkQTB4QiIpYCwkdGVtcAorCXZsZDEuNjQJCXskQTV4Qi0kQTZ4Qn0sIFskdGlucHRyLCA6MjU2XSEKKwl2c2hyLnU2NAkkdGVtcCxgJkRoaSgiJEEweEIiKWAsIzE2CisJdmxkMS42NAkJeyRBN3hCfSwgICAgICAgWyR0aW5wdHIsIDoxMjhdIQorCXZ6aXAuMTYJCWAmRGxvKCIkQTB4QiIpYCxgJkRoaSgiJEEweEIiKWAKKworLkxORU9OX3RhaWwyOgorCXZhZGQudTY0CWAmRGxvKCIkQTF4QiIpYCxgJkRsbygiJEExeEIiKWAsJHRlbXAKKwl2c3QxLjMyCQl7YCZEbG8oIiRBMHhCIilgWzBdfSwgWyR0b3V0cHRyLCA6MzJdIQorCXZzaHIudTY0CSR0ZW1wLGAmRGxvKCIkQTF4QiIpYCwjMTYKKwl2YWRkLnU2NAlgJkRoaSgiJEExeEIiKWAsYCZEaGkoIiRBMXhCIilgLCR0ZW1wCisJdnNoci51NjQJJHRlbXAsYCZEaGkoIiRBMXhCIilgLCMxNgorCXZ6aXAuMTYJCWAmRGxvKCIkQTF4QiIpYCxgJkRoaSgiJEExeEIiKWAKKworCXZhZGQudTY0CWAmRGxvKCIkQTJ4QiIpYCxgJkRsbygiJEEyeEIiKWAsJHRlbXAKKwl2c3QxLjMyCQl7YCZEbG8oIiRBMXhCIilgWzBdfSwgWyR0b3V0cHRyLCA6MzJdIQorCXZzaHIudTY0CSR0ZW1wLGAmRGxvKCIkQTJ4QiIpYCwjMTYKKwl2YWRkLnU2NAlgJkRoaSgiJEEyeEIiKWAsYCZEaGkoIiRBMnhCIilgLCR0ZW1wCisJdnNoci51NjQJJHRlbXAsYCZEaGkoIiRBMnhCIilgLCMxNgorCXZ6aXAuMTYJCWAmRGxvKCIkQTJ4QiIpYCxgJkRoaSgiJEEyeEIiKWAKKworCXZhZGQudTY0CWAmRGxvKCIkQTN4QiIpYCxgJkRsbygiJEEzeEIiKWAsJHRlbXAKKwl2c3QxLjMyCQl7YCZEbG8oIiRBMnhCIilgWzBdfSwgWyR0b3V0cHRyLCA6MzJdIQorCXZzaHIudTY0CSR0ZW1wLGAmRGxvKCIkQTN4QiIpYCwjMTYKKwl2YWRkLnU2NAlgJkRoaSgiJEEzeEIiKWAsYCZEaGkoIiRBM3hCIilgLCR0ZW1wCisJdnNoci51NjQJJHRlbXAsYCZEaGkoIiRBM3hCIilgLCMxNgorCXZ6aXAuMTYJCWAmRGxvKCIkQTN4QiIpYCxgJkRoaSgiJEEzeEIiKWAKKworCXZhZGQudTY0CWAmRGxvKCIkQTR4QiIpYCxgJkRsbygiJEE0eEIiKWAsJHRlbXAKKwl2c3QxLjMyCQl7YCZEbG8oIiRBM3hCIilgWzBdfSwgWyR0b3V0cHRyLCA6MzJdIQorCXZzaHIudTY0CSR0ZW1wLGAmRGxvKCIkQTR4QiIpYCwjMTYKKwl2YWRkLnU2NAlgJkRoaSgiJEE0eEIiKWAsYCZEaGkoIiRBNHhCIilgLCR0ZW1wCisJdnNoci51NjQJJHRlbXAsYCZEaGkoIiRBNHhCIilgLCMxNgorCXZ6aXAuMTYJCWAmRGxvKCIkQTR4QiIpYCxgJkRoaSgiJEE0eEIiKWAKKworCXZhZGQudTY0CWAmRGxvKCIkQTV4QiIpYCxgJkRsbygiJEE1eEIiKWAsJHRlbXAKKwl2c3QxLjMyCQl7YCZEbG8oIiRBNHhCIilgWzBdfSwgWyR0b3V0cHRyLCA6MzJdIQorCXZzaHIudTY0CSR0ZW1wLGAmRGxvKCIkQTV4QiIpYCwjMTYKKwl2YWRkLnU2NAlgJkRoaSgiJEE1eEIiKWAsYCZEaGkoIiRBNXhCIilgLCR0ZW1wCisJdnNoci51NjQJJHRlbXAsYCZEaGkoIiRBNXhCIilgLCMxNgorCXZ6aXAuMTYJCWAmRGxvKCIkQTV4QiIpYCxgJkRoaSgiJEE1eEIiKWAKKworCXZhZGQudTY0CWAmRGxvKCIkQTZ4QiIpYCxgJkRsbygiJEE2eEIiKWAsJHRlbXAKKwl2c3QxLjMyCQl7YCZEbG8oIiRBNXhCIilgWzBdfSwgWyR0b3V0cHRyLCA6MzJdIQorCXZzaHIudTY0CSR0ZW1wLGAmRGxvKCIkQTZ4QiIpYCwjMTYKKwl2YWRkLnU2NAlgJkRoaSgiJEE2eEIiKWAsYCZEaGkoIiRBNnhCIilgLCR0ZW1wCisJdmxkMS42NAkJeyRBMHhCfSwgWyR0aW5wdHIsIDoxMjhdIQorCXZzaHIudTY0CSR0ZW1wLGAmRGhpKCIkQTZ4QiIpYCwjMTYKKwl2emlwLjE2CQlgJkRsbygiJEE2eEIiKWAsYCZEaGkoIiRBNnhCIilgCisKKwl2YWRkLnU2NAlgJkRsbygiJEE3eEIiKWAsYCZEbG8oIiRBN3hCIilgLCR0ZW1wCisJdnN0MS4zMgkJe2AmRGxvKCIkQTZ4QiIpYFswXX0sIFskdG91dHB0ciwgOjMyXSEKKwl2c2hyLnU2NAkkdGVtcCxgJkRsbygiJEE3eEIiKWAsIzE2CisJdmFkZC51NjQJYCZEaGkoIiRBN3hCIilgLGAmRGhpKCIkQTd4QiIpYCwkdGVtcAorCXZsZDEuNjQJCXskQTF4Qi0kQTJ4Qn0sCVskdGlucHRyLCA6MjU2XSEKKwl2c2hyLnU2NAkkdGVtcCxgJkRoaSgiJEE3eEIiKWAsIzE2CisJdnppcC4xNgkJYCZEbG8oIiRBN3hCIilgLGAmRGhpKCIkQTd4QiIpYAorCXN1YnMJCSRpbm5lciwkaW5uZXIsIzgKKwl2c3QxLjMyCQl7YCZEbG8oIiRBN3hCIilgWzBdfSwgWyR0b3V0cHRyLCA6MzJdIQorCisJYm5lCS5MTkVPTl90YWlsCisKKwl2c3QxLjMyCXske3RlbXB9WzBdfSwgWyR0b3V0cHRyLCA6MzJdCQlAIHRvcC1tb3N0IGJpdAorCXN1YgkkbnB0ciwkbnB0ciwkbnVtLGxzbCMyCQkJQCByZXdpbmQgJG5wdHIKKwlzdWJzCSRhcHRyLHNwLCMwCQkJCUAgY2xlYXIgY2FycnkgZmxhZworCWFkZAkkYnB0cixzcCwkbnVtLGxzbCMyCisKKy5MTkVPTl9zdWI6CisJbGRtaWEJJGFwdHIhLCB7cjQtcjd9CisJbGRtaWEJJG5wdHIhLCB7cjgtcjExfQorCXNiY3MJcjgsIHI0LHI4CisJc2JjcwlyOSwgcjUscjkKKwlzYmNzCXIxMCxyNixyMTAKKwlzYmNzCXIxMSxyNyxyMTEKKwl0ZXEJJGFwdHIsJGJwdHIJCQkJQCBwcmVzZXJ2ZXMgY2FycnkKKwlzdG1pYQkkcnB0ciEsIHtyOC1yMTF9CisJYm5lCS5MTkVPTl9zdWIKKworCWxkcglyMTAsIFskYXB0cl0JCQkJQCBsb2FkIHRvcC1tb3N0IGJpdAorCXZlb3IJcTAscTAscTAKKwlzdWIJcjExLCRicHRyLHNwCQkJCUAgdGhpcyBpcyBudW0qNAorCXZlb3IJcTEscTEscTEKKwltb3YJJGFwdHIsc3AKKwlzdWIJJHJwdHIsJHJwdHIscjExCQkJCUAgcmV3aW5kICRycHRyCisJbW92CSRucHRyLCRicHRyCQkJCUAgc2Vjb25kIDMvNHRoIG9mIGZyYW1lCisJc2JjcwlyMTAscjEwLCMwCQkJCUAgcmVzdWx0IGlzIGNhcnJ5IGZsYWcKKworLkxORU9OX2NvcHlfbl96YXA6CisJbGRtaWEJJGFwdHIhLCB7cjQtcjd9CisJbGRtaWEJJHJwdHIsICB7cjgtcjExfQorCW1vdmNjCXI4LCByNAorCXZzdDEuNjQJe3EwLXExfSwgWyRucHRyLDoyNTZdIQkJCUAgd2lwZQorCW1vdmNjCXI5LCByNQorCW1vdmNjCXIxMCxyNgorCXZzdDEuNjQJe3EwLXExfSwgWyRucHRyLDoyNTZdIQkJCUAgd2lwZQorCW1vdmNjCXIxMSxyNworCWxkbWlhCSRhcHRyLCB7cjQtcjd9CisJc3RtaWEJJHJwdHIhLCB7cjgtcjExfQorCXN1YgkkYXB0ciwkYXB0ciwjMTYKKwlsZG1pYQkkcnB0ciwge3I4LXIxMX0KKwltb3ZjYwlyOCwgcjQKKwl2c3QxLjY0CXtxMC1xMX0sIFskYXB0ciw6MjU2XSEJCQlAIHdpcGUKKwltb3ZjYwlyOSwgcjUKKwltb3ZjYwlyMTAscjYKKwl2c3QxLjY0CXtxMC1xMX0sIFskbnB0ciw6MjU2XSEJCQlAIHdpcGUKKwltb3ZjYwlyMTEscjcKKwl0ZXEJJGFwdHIsJGJwdHIJCQkJQCBwcmVzZXJ2ZXMgY2FycnkKKwlzdG1pYQkkcnB0ciEsIHtyOC1yMTF9CisJYm5lCS5MTkVPTl9jb3B5X25femFwCisKKwlzdWIJc3AsaXAsIzk2CisgICAgICAgIHZsZG1pYSAgc3AhLHtkOC1kMTV9CisgICAgICAgIGxkbWlhICAgc3AhLHtyNC1yMTF9CisJcmV0CQkJCQkJQCBieCBscgorLnNpemUJYm5fbXVsOHhfbW9udF9uZW9uLC4tYm5fbXVsOHhfbW9udF9uZW9uCisjZW5kaWYKK19fXworfQorJGNvZGUuPTw8X19fOworLmFzY2l6CSJNb250Z29tZXJ5IG11bHRpcGxpY2F0aW9uIGZvciBBUk12NC9ORU9OLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgogLmFsaWduCTIKKyNpZiBfX0FSTV9BUkNIX18+PTcKKy5jb21tCU9QRU5TU0xfYXJtY2FwX1AsNCw0CisjZW5kaWYKIF9fXwogCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKICRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0CiskY29kZSA9fiBzL1xicmV0XGIvYngJbHIvZ207CiBwcmludCAkY29kZTsKIGNsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZV9hZXMuYyBiL2NyeXB0by9ldnAvZV9hZXMuYwppbmRleCBjNzg2OWI2Li5hZDBmN2E0IDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2VfYWVzLmMKKysrIGIvY3J5cHRvL2V2cC9lX2Flcy5jCkBAIC02Miw3ICs2Miw3IEBACiAKIHR5cGVkZWYgc3RydWN0CiAJewotCUFFU19LRVkga3M7CisJdW5pb24geyBkb3VibGUgYWxpZ247IEFFU19LRVkga3M7IH0ga3M7CiAJYmxvY2sxMjhfZiBibG9jazsKIAl1bmlvbiB7CiAJCWNiYzEyOF9mIGNiYzsKQEAgLTcyLDcgKzcyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAogdHlwZWRlZiBzdHJ1Y3QKIAl7Ci0JQUVTX0tFWSBrczsJCS8qIEFFUyBrZXkgc2NoZWR1bGUgdG8gdXNlICovCisJdW5pb24geyBkb3VibGUgYWxpZ247IEFFU19LRVkga3M7IH0ga3M7CS8qIEFFUyBrZXkgc2NoZWR1bGUgdG8gdXNlICovCiAJaW50IGtleV9zZXQ7CQkvKiBTZXQgaWYga2V5IGluaXRpYWxpc2VkICovCiAJaW50IGl2X3NldDsJCS8qIFNldCBpZiBhbiBpdiBpcyBzZXQgKi8KIAlHQ00xMjhfQ09OVEVYVCBnY207CkBAIC04Niw3ICs4Niw3IEBAIHR5cGVkZWYgc3RydWN0CiAKIHR5cGVkZWYgc3RydWN0CiAJewotCUFFU19LRVkga3MxLCBrczI7CS8qIEFFUyBrZXkgc2NoZWR1bGVzIHRvIHVzZSAqLworCXVuaW9uIHsgZG91YmxlIGFsaWduOyBBRVNfS0VZIGtzOyB9IGtzMSwga3MyOwkvKiBBRVMga2V5IHNjaGVkdWxlcyB0byB1c2UgKi8KIAlYVFMxMjhfQ09OVEVYVCB4dHM7CiAJdm9pZCAgICAgKCpzdHJlYW0pKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAogCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgbGVuZ3RoLApAQCAtOTYsNyArOTYsNyBAQCB0eXBlZGVmIHN0cnVjdAogCiB0eXBlZGVmIHN0cnVjdAogCXsKLQlBRVNfS0VZIGtzOwkJLyogQUVTIGtleSBzY2hlZHVsZSB0byB1c2UgKi8KKwl1bmlvbiB7IGRvdWJsZSBhbGlnbjsgQUVTX0tFWSBrczsgfSBrczsJLyogQUVTIGtleSBzY2hlZHVsZSB0byB1c2UgKi8KIAlpbnQga2V5X3NldDsJCS8qIFNldCBpZiBrZXkgaW5pdGlhbGlzZWQgKi8KIAlpbnQgaXZfc2V0OwkJLyogU2V0IGlmIGFuIGl2IGlzIHNldCAqLwogCWludCB0YWdfc2V0OwkJLyogU2V0IGlmIHRhZyBpcyB2YWxpZCAqLwpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQUVTX3h0c19kZWNyeXB0KGNvbnN0IGNoYXIgKmlucCxjaGFyICpvdXQsc2l6ZV90IGxlbiwKIAlkZWZpbmVkKF9NX0FNRDY0KQl8fCBkZWZpbmVkKF9NX1g2NCkJfHwgXAogCWRlZmluZWQoX19JTlRFTF9fKQkJCQkpCiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07CitleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QW107CiAKICNpZmRlZiBWUEFFU19BU00KICNkZWZpbmUgVlBBRVNfQ0FQQUJMRQkoT1BFTlNTTF9pYTMyY2FwX1BbMV0mKDE8PCg0MS0zMikpKQpAQCAtMzEwLDcgKzMxMCw3IEBAIHN0YXRpYyBpbnQgYWVzbmlfZ2NtX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKIAkJcmV0dXJuIDE7CiAJaWYgKGtleSkKIAkJewotCQlhZXNuaV9zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA4LCAmZ2N0eC0+a3MpOworCQlhZXNuaV9zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA4LCAmZ2N0eC0+a3Mua3MpOwogCQlDUllQVE9fZ2NtMTI4X2luaXQoJmdjdHgtPmdjbSwgJmdjdHgtPmtzLAogCQkJCShibG9jazEyOF9mKWFlc25pX2VuY3J5cHQpOwogCQlnY3R4LT5jdHIgPSAoY3RyMTI4X2YpYWVzbmlfY3RyMzJfZW5jcnlwdF9ibG9ja3M7CkBAIC0zNTUsMTkgKzM1NSwxOSBAQCBzdGF0aWMgaW50IGFlc25pX3h0c19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJCS8qIGtleV9sZW4gaXMgdHdvIEFFUyBrZXlzICovCiAJCWlmIChlbmMpCiAJCQl7Ci0JCQlhZXNuaV9zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MxKTsKKwkJCWFlc25pX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczEua3MpOwogCQkJeGN0eC0+eHRzLmJsb2NrMSA9IChibG9jazEyOF9mKWFlc25pX2VuY3J5cHQ7CiAJCQl4Y3R4LT5zdHJlYW0gPSBhZXNuaV94dHNfZW5jcnlwdDsKIAkJCX0KIAkJZWxzZQogCQkJewotCQkJYWVzbmlfc2V0X2RlY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMSk7CisJCQlhZXNuaV9zZXRfZGVjcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MxLmtzKTsKIAkJCXhjdHgtPnh0cy5ibG9jazEgPSAoYmxvY2sxMjhfZilhZXNuaV9kZWNyeXB0OwogCQkJeGN0eC0+c3RyZWFtID0gYWVzbmlfeHRzX2RlY3J5cHQ7CiAJCQl9CiAKIAkJYWVzbmlfc2V0X2VuY3J5cHRfa2V5KGtleSArIGN0eC0+a2V5X2xlbi8yLAotCQkJCQkJY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMik7CisJCQkJCQljdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MyLmtzKTsKIAkJeGN0eC0+eHRzLmJsb2NrMiA9IChibG9jazEyOF9mKWFlc25pX2VuY3J5cHQ7CiAKIAkJeGN0eC0+eHRzLmtleTEgPSAmeGN0eC0+a3MxOwpAQCAtMzk0LDcgKzM5NCw3IEBAIHN0YXRpYyBpbnQgYWVzbmlfY2NtX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKIAkJcmV0dXJuIDE7CiAJaWYgKGtleSkKIAkJewotCQlhZXNuaV9zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA4LCAmY2N0eC0+a3MpOworCQlhZXNuaV9zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA4LCAmY2N0eC0+a3Mua3MpOwogCQlDUllQVE9fY2NtMTI4X2luaXQoJmNjdHgtPmNjbSwgY2N0eC0+TSwgY2N0eC0+TCwKIAkJCQkJJmNjdHgtPmtzLCAoYmxvY2sxMjhfZilhZXNuaV9lbmNyeXB0KTsKIAkJY2N0eC0+c3RyID0gZW5jPyhjY20xMjhfZilhZXNuaV9jY202NF9lbmNyeXB0X2Jsb2NrcyA6CkBAIC00ODQsNiArNDg0LDM4IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfIyNrZXlsZW4jI18jI21vZGUodm9pZCkgXAogeyByZXR1cm4gJmFlc18jI2tleWxlbiMjXyMjbW9kZTsgfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JKKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSkKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgorI2lmIF9fQVJNX0FSQ0hfXz49NworIyBpZiBkZWZpbmVkKEJTQUVTX0FTTSkKKyMgIGRlZmluZSBCU0FFU19DQVBBQkxFCShPUEVOU1NMX2FybWNhcF9QICYgQVJNVjdfTkVPTikKKyMgZW5kaWYKKyMgZGVmaW5lIEhXQUVTX0NBUEFCTEUgKE9QRU5TU0xfYXJtY2FwX1AgJiBBUk1WOF9BRVMpCisjIGRlZmluZSBIV0FFU19zZXRfZW5jcnlwdF9rZXkgYWVzX3Y4X3NldF9lbmNyeXB0X2tleQorIyBkZWZpbmUgSFdBRVNfc2V0X2RlY3J5cHRfa2V5IGFlc192OF9zZXRfZGVjcnlwdF9rZXkKKyMgZGVmaW5lIEhXQUVTX2VuY3J5cHQgYWVzX3Y4X2VuY3J5cHQKKyMgZGVmaW5lIEhXQUVTX2RlY3J5cHQgYWVzX3Y4X2RlY3J5cHQKKyMgZGVmaW5lIEhXQUVTX2NiY19lbmNyeXB0IGFlc192OF9jYmNfZW5jcnlwdAorIyBkZWZpbmUgSFdBRVNfY3RyMzJfZW5jcnlwdF9ibG9ja3MgYWVzX3Y4X2N0cjMyX2VuY3J5cHRfYmxvY2tzCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIV0FFU19DQVBBQkxFKQoraW50IEhXQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKwlBRVNfS0VZICprZXkpOworaW50IEhXQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKwlBRVNfS0VZICprZXkpOwordm9pZCBIV0FFU19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgQUVTX0tFWSAqa2V5KTsKK3ZvaWQgSFdBRVNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCWNvbnN0IEFFU19LRVkgKmtleSk7Cit2b2lkIEhXQUVTX2NiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGNvbnN0IGludCBlbmMpOwordm9pZCBIV0FFU19jdHIzMl9lbmNyeXB0X2Jsb2Nrcyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCXNpemVfdCBsZW4sIGNvbnN0IEFFU19LRVkgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciBpdmVjWzE2XSk7CisjZW5kaWYKKwogI2RlZmluZSBCTE9DS19DSVBIRVJfZ2VuZXJpY19wYWNrKG5pZCxrZXlsZW4sZmxhZ3MpCQlcCiAJQkxPQ0tfQ0lQSEVSX2dlbmVyaWMobmlkLGtleWxlbiwxNiwxNixjYmMsY2JjLENCQyxmbGFnc3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkJXAogCUJMT0NLX0NJUEhFUl9nZW5lcmljKG5pZCxrZXlsZW4sMTYsMCxlY2IsZWNiLEVDQixmbGFnc3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkJXApAQCAtNTAyLDEwICs1MzQsMjMgQEAgc3RhdGljIGludCBhZXNfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAogCW1vZGUgPSBjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9NT0RFOwogCWlmICgobW9kZSA9PSBFVlBfQ0lQSF9FQ0JfTU9ERSB8fCBtb2RlID09IEVWUF9DSVBIX0NCQ19NT0RFKQogCSAgICAmJiAhZW5jKQorI2lmZGVmIEhXQUVTX0NBUEFCTEUKKwkgICAgaWYgKEhXQUVTX0NBUEFCTEUpCisJCXsKKwkJcmV0ID0gSFdBRVNfc2V0X2RlY3J5cHRfa2V5KGtleSxjdHgtPmtleV9sZW4qOCwmZGF0LT5rcy5rcyk7CisJCWRhdC0+YmxvY2sgICAgICA9IChibG9jazEyOF9mKUhXQUVTX2RlY3J5cHQ7CisJCWRhdC0+c3RyZWFtLmNiYyA9IE5VTEw7CisjaWZkZWYgSFdBRVNfY2JjX2VuY3J5cHQKKwkJaWYgKG1vZGU9PUVWUF9DSVBIX0NCQ19NT0RFKQorCQkgICAgZGF0LT5zdHJlYW0uY2JjID0gKGNiYzEyOF9mKUhXQUVTX2NiY19lbmNyeXB0OworI2VuZGlmCisJCX0KKwkgICAgZWxzZQorI2VuZGlmCiAjaWZkZWYgQlNBRVNfQ0FQQUJMRQogCSAgICBpZiAoQlNBRVNfQ0FQQUJMRSAmJiBtb2RlPT1FVlBfQ0lQSF9DQkNfTU9ERSkKIAkJewotCQlyZXQgPSBBRVNfc2V0X2RlY3J5cHRfa2V5KGtleSxjdHgtPmtleV9sZW4qOCwmZGF0LT5rcyk7CisJCXJldCA9IEFFU19zZXRfZGVjcnlwdF9rZXkoa2V5LGN0eC0+a2V5X2xlbio4LCZkYXQtPmtzLmtzKTsKIAkJZGF0LT5ibG9jawk9IChibG9jazEyOF9mKUFFU19kZWNyeXB0OwogCQlkYXQtPnN0cmVhbS5jYmMJPSAoY2JjMTI4X2YpYnNhZXNfY2JjX2VuY3J5cHQ7CiAJCX0KQEAgLTUxNCw3ICs1NTksNyBAQCBzdGF0aWMgaW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAjaWZkZWYgVlBBRVNfQ0FQQUJMRQogCSAgICBpZiAoVlBBRVNfQ0FQQUJMRSkKIAkJewotCQlyZXQgPSB2cGFlc19zZXRfZGVjcnlwdF9rZXkoa2V5LGN0eC0+a2V5X2xlbio4LCZkYXQtPmtzKTsKKwkJcmV0ID0gdnBhZXNfc2V0X2RlY3J5cHRfa2V5KGtleSxjdHgtPmtleV9sZW4qOCwmZGF0LT5rcy5rcyk7CiAJCWRhdC0+YmxvY2sJPSAoYmxvY2sxMjhfZil2cGFlc19kZWNyeXB0OwogCQlkYXQtPnN0cmVhbS5jYmMJPSBtb2RlPT1FVlBfQ0lQSF9DQkNfTU9ERSA/CiAJCQkJCShjYmMxMjhfZil2cGFlc19jYmNfZW5jcnlwdCA6CkBAIC01MjMsMTcgKzU2OCwzNyBAQCBzdGF0aWMgaW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJICAgIGVsc2UKICNlbmRpZgogCQl7Ci0JCXJldCA9IEFFU19zZXRfZGVjcnlwdF9rZXkoa2V5LGN0eC0+a2V5X2xlbio4LCZkYXQtPmtzKTsKKwkJcmV0ID0gQUVTX3NldF9kZWNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmRhdC0+a3Mua3MpOwogCQlkYXQtPmJsb2NrCT0gKGJsb2NrMTI4X2YpQUVTX2RlY3J5cHQ7CiAJCWRhdC0+c3RyZWFtLmNiYwk9IG1vZGU9PUVWUF9DSVBIX0NCQ19NT0RFID8KIAkJCQkJKGNiYzEyOF9mKUFFU19jYmNfZW5jcnlwdCA6CiAJCQkJCU5VTEw7CiAJCX0KIAllbHNlCisjaWZkZWYgSFdBRVNfQ0FQQUJMRQorCSAgICBpZiAoSFdBRVNfQ0FQQUJMRSkKKwkJeworCQlyZXQgPSBIV0FFU19zZXRfZW5jcnlwdF9rZXkoa2V5LGN0eC0+a2V5X2xlbio4LCZkYXQtPmtzLmtzKTsKKwkJZGF0LT5ibG9jayAgICAgID0gKGJsb2NrMTI4X2YpSFdBRVNfZW5jcnlwdDsKKwkJZGF0LT5zdHJlYW0uY2JjID0gTlVMTDsKKyNpZmRlZiBIV0FFU19jYmNfZW5jcnlwdAorCQlpZiAobW9kZT09RVZQX0NJUEhfQ0JDX01PREUpCisJCSAgICBkYXQtPnN0cmVhbS5jYmMgPSAoY2JjMTI4X2YpSFdBRVNfY2JjX2VuY3J5cHQ7CisJCWVsc2UKKyNlbmRpZgorI2lmZGVmIEhXQUVTX2N0cjMyX2VuY3J5cHRfYmxvY2tzCisJCWlmIChtb2RlPT1FVlBfQ0lQSF9DVFJfTU9ERSkKKwkJICAgIGRhdC0+c3RyZWFtLmN0ciA9IChjdHIxMjhfZilIV0FFU19jdHIzMl9lbmNyeXB0X2Jsb2NrczsKKwkJZWxzZQorI2VuZGlmCisJCSh2b2lkKTA7CS8qIHRlcm1pbmF0ZSBwb3RlbnRpYWxseSBvcGVuICdlbHNlJyAqLworCQl9CisJICAgIGVsc2UKKyNlbmRpZgogI2lmZGVmIEJTQUVTX0NBUEFCTEUKIAkgICAgaWYgKEJTQUVTX0NBUEFCTEUgJiYgbW9kZT09RVZQX0NJUEhfQ1RSX01PREUpCiAJCXsKLQkJcmV0ID0gQUVTX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmRhdC0+a3MpOworCQlyZXQgPSBBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSxjdHgtPmtleV9sZW4qOCwmZGF0LT5rcy5rcyk7CiAJCWRhdC0+YmxvY2sJPSAoYmxvY2sxMjhfZilBRVNfZW5jcnlwdDsKIAkJZGF0LT5zdHJlYW0uY3RyCT0gKGN0cjEyOF9mKWJzYWVzX2N0cjMyX2VuY3J5cHRfYmxvY2tzOwogCQl9CkBAIC01NDIsNyArNjA3LDcgQEAgc3RhdGljIGludCBhZXNfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAogI2lmZGVmIFZQQUVTX0NBUEFCTEUKIAkgICAgaWYgKFZQQUVTX0NBUEFCTEUpCiAJCXsKLQkJcmV0ID0gdnBhZXNfc2V0X2VuY3J5cHRfa2V5KGtleSxjdHgtPmtleV9sZW4qOCwmZGF0LT5rcyk7CisJCXJldCA9IHZwYWVzX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmRhdC0+a3Mua3MpOwogCQlkYXQtPmJsb2NrCT0gKGJsb2NrMTI4X2YpdnBhZXNfZW5jcnlwdDsKIAkJZGF0LT5zdHJlYW0uY2JjCT0gbW9kZT09RVZQX0NJUEhfQ0JDX01PREUgPwogCQkJCQkoY2JjMTI4X2YpdnBhZXNfY2JjX2VuY3J5cHQgOgpAQCAtNTUxLDcgKzYxNiw3IEBAIHN0YXRpYyBpbnQgYWVzX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKIAkgICAgZWxzZQogI2VuZGlmCiAJCXsKLQkJcmV0ID0gQUVTX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmRhdC0+a3MpOworCQlyZXQgPSBBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSxjdHgtPmtleV9sZW4qOCwmZGF0LT5rcy5rcyk7CiAJCWRhdC0+YmxvY2sJPSAoYmxvY2sxMjhfZilBRVNfZW5jcnlwdDsKIAkJZGF0LT5zdHJlYW0uY2JjCT0gbW9kZT09RVZQX0NJUEhfQ0JDX01PREUgPwogCQkJCQkoY2JjMTI4X2YpQUVTX2NiY19lbmNyeXB0IDoKQEAgLTgyMiwxMCArODg3LDI1IEBAIHN0YXRpYyBpbnQgYWVzX2djbV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJCXJldHVybiAxOwogCWlmIChrZXkpCiAJCXsgZG8geworI2lmZGVmIEhXQUVTX0NBUEFCTEUKKwkJaWYgKEhXQUVTX0NBUEFCTEUpCisJCQl7CisJCQlIV0FFU19zZXRfZW5jcnlwdF9rZXkoa2V5LGN0eC0+a2V5X2xlbio4LCZnY3R4LT5rcy5rcyk7CisJCQlDUllQVE9fZ2NtMTI4X2luaXQoJmdjdHgtPmdjbSwmZ2N0eC0+a3MsCisJCQkJCShibG9jazEyOF9mKUhXQUVTX2VuY3J5cHQpOworI2lmZGVmIEhXQUVTX2N0cjMyX2VuY3J5cHRfYmxvY2tzCisJCQlnY3R4LT5jdHIgPSAoY3RyMTI4X2YpSFdBRVNfY3RyMzJfZW5jcnlwdF9ibG9ja3M7CisjZWxzZQorCQkJZ2N0eC0+Y3RyID0gTlVMTDsKKyNlbmRpZgorCQkJYnJlYWs7CisJCQl9CisJCWVsc2UKKyNlbmRpZgogI2lmZGVmIEJTQUVTX0NBUEFCTEUKIAkJaWYgKEJTQUVTX0NBUEFCTEUpCiAJCQl7Ci0JCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSxjdHgtPmtleV9sZW4qOCwmZ2N0eC0+a3MpOworCQkJQUVTX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmdjdHgtPmtzLmtzKTsKIAkJCUNSWVBUT19nY20xMjhfaW5pdCgmZ2N0eC0+Z2NtLCZnY3R4LT5rcywKIAkJCQkJKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOwogCQkJZ2N0eC0+Y3RyID0gKGN0cjEyOF9mKWJzYWVzX2N0cjMyX2VuY3J5cHRfYmxvY2tzOwpAQCAtODM2LDcgKzkxNiw3IEBAIHN0YXRpYyBpbnQgYWVzX2djbV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAjaWZkZWYgVlBBRVNfQ0FQQUJMRQogCQlpZiAoVlBBRVNfQ0FQQUJMRSkKIAkJCXsKLQkJCXZwYWVzX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmdjdHgtPmtzKTsKKwkJCXZwYWVzX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmdjdHgtPmtzLmtzKTsKIAkJCUNSWVBUT19nY20xMjhfaW5pdCgmZ2N0eC0+Z2NtLCZnY3R4LT5rcywKIAkJCQkJKGJsb2NrMTI4X2YpdnBhZXNfZW5jcnlwdCk7CiAJCQlnY3R4LT5jdHIgPSBOVUxMOwpAQCAtODQ2LDcgKzkyNiw3IEBAIHN0YXRpYyBpbnQgYWVzX2djbV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAjZW5kaWYKIAkJKHZvaWQpMDsJLyogdGVybWluYXRlIHBvdGVudGlhbGx5IG9wZW4gJ2Vsc2UnICovCiAKLQkJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDgsICZnY3R4LT5rcyk7CisJCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA4LCAmZ2N0eC0+a3Mua3MpOwogCQlDUllQVE9fZ2NtMTI4X2luaXQoJmdjdHgtPmdjbSwgJmdjdHgtPmtzLCAoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CiAjaWZkZWYgQUVTX0NUUl9BU00KIAkJZ2N0eC0+Y3RyID0gKGN0cjEyOF9mKUFFU19jdHIzMl9lbmNyeXB0OwpAQCAtMTA2Nyw2ICsxMTQ3LDI5IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJCXhjdHgtPnN0cmVhbSA9IE5VTEw7CiAjZW5kaWYKIAkJLyoga2V5X2xlbiBpcyB0d28gQUVTIGtleXMgKi8KKyNpZmRlZiBIV0FFU19DQVBBQkxFCisJCWlmIChIV0FFU19DQVBBQkxFKQorCQkJeworCQkJaWYgKGVuYykKKwkJCSAgICB7CisJCQkgICAgSFdBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMS5rcyk7CisJCQkgICAgeGN0eC0+eHRzLmJsb2NrMSA9IChibG9jazEyOF9mKUhXQUVTX2VuY3J5cHQ7CisJCQkgICAgfQorCQkJZWxzZQorCQkJICAgIHsKKwkJCSAgICBIV0FFU19zZXRfZGVjcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MxLmtzKTsKKwkJCSAgICB4Y3R4LT54dHMuYmxvY2sxID0gKGJsb2NrMTI4X2YpSFdBRVNfZGVjcnlwdDsKKwkJCSAgICB9CisKKwkJCUhXQUVTX3NldF9lbmNyeXB0X2tleShrZXkgKyBjdHgtPmtleV9sZW4vMiwKKwkJCQkJCSAgICBjdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MyLmtzKTsKKwkJCXhjdHgtPnh0cy5ibG9jazIgPSAoYmxvY2sxMjhfZilIV0FFU19lbmNyeXB0OworCisJCQl4Y3R4LT54dHMua2V5MSA9ICZ4Y3R4LT5rczE7CisJCQlicmVhazsKKwkJCX0KKwkJZWxzZQorI2VuZGlmCiAjaWZkZWYgQlNBRVNfQ0FQQUJMRQogCQlpZiAoQlNBRVNfQ0FQQUJMRSkKIAkJCXhjdHgtPnN0cmVhbSA9IGVuYyA/IGJzYWVzX3h0c19lbmNyeXB0IDogYnNhZXNfeHRzX2RlY3J5cHQ7CkBAIC0xMDc3LDE3ICsxMTgwLDE3IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJCSAgICB7CiAJCSAgICBpZiAoZW5jKQogCQkJewotCQkJdnBhZXNfc2V0X2VuY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMSk7CisJCQl2cGFlc19zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MxLmtzKTsKIAkJCXhjdHgtPnh0cy5ibG9jazEgPSAoYmxvY2sxMjhfZil2cGFlc19lbmNyeXB0OwogCQkJfQogCQkgICAgZWxzZQogCQkJewotCQkJdnBhZXNfc2V0X2RlY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMSk7CisJCQl2cGFlc19zZXRfZGVjcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MxLmtzKTsKIAkJCXhjdHgtPnh0cy5ibG9jazEgPSAoYmxvY2sxMjhfZil2cGFlc19kZWNyeXB0OwogCQkJfQogCiAJCSAgICB2cGFlc19zZXRfZW5jcnlwdF9rZXkoa2V5ICsgY3R4LT5rZXlfbGVuLzIsCi0JCQkJCQljdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MyKTsKKwkJCQkJCWN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczIua3MpOwogCQkgICAgeGN0eC0+eHRzLmJsb2NrMiA9IChibG9jazEyOF9mKXZwYWVzX2VuY3J5cHQ7CiAKIAkJICAgIHhjdHgtPnh0cy5rZXkxID0gJnhjdHgtPmtzMTsKQEAgLTEwOTksMTcgKzEyMDIsMTcgQEAgc3RhdGljIGludCBhZXNfeHRzX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKIAogCQlpZiAoZW5jKQogCQkJewotCQkJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczEpOworCQkJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczEua3MpOwogCQkJeGN0eC0+eHRzLmJsb2NrMSA9IChibG9jazEyOF9mKUFFU19lbmNyeXB0OwogCQkJfQogCQllbHNlCiAJCQl7Ci0JCQlBRVNfc2V0X2RlY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMSk7CisJCQlBRVNfc2V0X2RlY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMS5rcyk7CiAJCQl4Y3R4LT54dHMuYmxvY2sxID0gKGJsb2NrMTI4X2YpQUVTX2RlY3J5cHQ7CiAJCQl9CiAKIAkJQUVTX3NldF9lbmNyeXB0X2tleShrZXkgKyBjdHgtPmtleV9sZW4vMiwKLQkJCQkJCWN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczIpOworCQkJCQkJY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMi5rcyk7CiAJCXhjdHgtPnh0cy5ibG9jazIgPSAoYmxvY2sxMjhfZilBRVNfZW5jcnlwdDsKIAogCQl4Y3R4LT54dHMua2V5MSA9ICZ4Y3R4LT5rczE7CkBAIC0xMjE3LDEwICsxMzIwLDIzIEBAIHN0YXRpYyBpbnQgYWVzX2NjbV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJCXJldHVybiAxOwogCWlmIChrZXkpIGRvCiAJCXsKKyNpZmRlZiBIV0FFU19DQVBBQkxFCisJCWlmIChIV0FFU19DQVBBQkxFKQorCQkJeworCQkJSFdBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSxjdHgtPmtleV9sZW4qOCwmY2N0eC0+a3Mua3MpOworCisJCQlDUllQVE9fY2NtMTI4X2luaXQoJmNjdHgtPmNjbSwgY2N0eC0+TSwgY2N0eC0+TCwKKwkJCQkJJmNjdHgtPmtzLCAoYmxvY2sxMjhfZilIV0FFU19lbmNyeXB0KTsKKwkJCWNjdHgtPnN0ciA9IE5VTEw7CisJCQljY3R4LT5rZXlfc2V0ID0gMTsKKwkJCWJyZWFrOworCQkJfQorCQllbHNlCisjZW5kaWYKICNpZmRlZiBWUEFFU19DQVBBQkxFCiAJCWlmIChWUEFFU19DQVBBQkxFKQogCQkJewotCQkJdnBhZXNfc2V0X2VuY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuKjgsICZjY3R4LT5rcyk7CisJCQl2cGFlc19zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4qOCwgJmNjdHgtPmtzLmtzKTsKIAkJCUNSWVBUT19jY20xMjhfaW5pdCgmY2N0eC0+Y2NtLCBjY3R4LT5NLCBjY3R4LT5MLAogCQkJCQkmY2N0eC0+a3MsIChibG9jazEyOF9mKXZwYWVzX2VuY3J5cHQpOwogCQkJY2N0eC0+c3RyID0gTlVMTDsKQEAgLTEyMjgsNyArMTM0NCw3IEBAIHN0YXRpYyBpbnQgYWVzX2NjbV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJCQlicmVhazsKIAkJCX0KICNlbmRpZgotCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogOCwgJmNjdHgtPmtzKTsKKwkJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDgsICZjY3R4LT5rcy5rcyk7CiAJCUNSWVBUT19jY20xMjhfaW5pdCgmY2N0eC0+Y2NtLCBjY3R4LT5NLCBjY3R4LT5MLAogCQkJCQkmY2N0eC0+a3MsIChibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKIAkJY2N0eC0+c3RyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2NyeXB0by9tb2Rlcy9NYWtlZmlsZSBiL2NyeXB0by9tb2Rlcy9NYWtlZmlsZQppbmRleCAzZDhiYWZkLi45YmNmYTBlIDEwMDY0NAotLS0gYS9jcnlwdG8vbW9kZXMvTWFrZWZpbGUKKysrIGIvY3J5cHRvL21vZGVzL01ha2VmaWxlCkBAIC01NiwxNCArNTYsMTYgQEAgZ2hhc2gtYWxwaGEuczoJYXNtL2doYXNoLWFscGhhLnBsCiAJKHByZXByb2M9L3RtcC8kJCQkLiRAOyB0cmFwICJybSAkJHByZXByb2MiIElOVDsgXAogCSQoUEVSTCkgYXNtL2doYXNoLWFscGhhLnBsID4gJCRwcmVwcm9jICYmIFwKIAkkKENDKSAtRSAkJHByZXByb2MgPiAkQCAmJiBybSAkJHByZXByb2MpCi0KIGdoYXNoLXBhcmlzYy5zOglhc20vZ2hhc2gtcGFyaXNjLnBsCiAJJChQRVJMKSBhc20vZ2hhc2gtcGFyaXNjLnBsICQoUEVSTEFTTV9TQ0hFTUUpICRACitnaGFzaHY4LWFybXguUzoJYXNtL2doYXNodjgtYXJteC5wbAorCSQoUEVSTCkgYXNtL2doYXNodjgtYXJteC5wbCAkKFBFUkxBU01fU0NIRU1FKSAkQAogCiAjIEdOVSBtYWtlICJjYXRjaCBhbGwiCiBnaGFzaC0lLlM6CWFzbS9naGFzaC0lLnBsOwkkKFBFUkwpICQ8ICQoUEVSTEFTTV9TQ0hFTUUpICRACiAKIGdoYXNoLWFybXY0Lm86CWdoYXNoLWFybXY0LlMKK2doYXNodjgtYXJteC5vOglnaGFzaHY4LWFybXguUwogCiBmaWxlczoKIAkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2FzbS9naGFzaC1hcm12NC5wbCBiL2NyeXB0by9tb2Rlcy9hc20vZ2hhc2gtYXJtdjQucGwKaW5kZXggZDkxNTg2ZS4uMDAyM2JmOSAxMDA2NDQKLS0tIGEvY3J5cHRvL21vZGVzL2FzbS9naGFzaC1hcm12NC5wbAorKysgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLWFybXY0LnBsCkBAIC0zNSw2ICszNSwyMCBAQAogIyBBZGQgTkVPTiBpbXBsZW1lbnRhdGlvbiBmZWF0dXJpbmcgcG9seW5vbWlhbCBtdWx0aXBsaWNhdGlvbiwgaS5lLiBubwogIyBsb29rdXAgdGFibGVzIGludm9sdmVkLiBPbiBDb3J0ZXggQTggaXQgd2FzIG1lYXN1cmVkIHRvIHByb2Nlc3Mgb25lCiAjIGJ5dGUgaW4gMTUgY3ljbGVzIG9yIDU1JSBmYXN0ZXIgdGhhbiBpbnRlZ2VyLW9ubHkgY29kZS4KKyMKKyMgQXByaWwgMjAxNAorIworIyBTd2l0Y2ggdG8gbXVsdGlwbGljYXRpb24gYWxnb3JpdGhtIHN1Z2dlc3RlZCBpbiBwYXBlciByZWZlcnJlZAorIyBiZWxvdyBhbmQgY29tYmluZSBpdCB3aXRoIHJlZHVjdGlvbiBhbGdvcml0aG0gZnJvbSB4ODYgbW9kdWxlLgorIyBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvdmVyIHByZXZpb3VzIHZlcnNpb24gdmFyaWVzIGZyb20gNjUlIG9uCisjIFNuYXBkcmFnb24gUzQgdG8gMTEwJSBvbiBDb3J0ZXggQTkuIEluIGFic29sdXRlIHRlcm1zIENvcnRleCBBOAorIyBwcm9jZXNzZXMgb25lIGJ5dGUgaW4gOC40NSBjeWNsZXMsIEE5IC0gaW4gMTAuMiwgU25hcGRyYWdvbiBTNCAtCisjIGluIDkuMzMuCisjCisjIEPibWFyYSwgRC47IEdvdXbqYSwgQy4gUC4gTC47IEzzcGV6LCBKLiAmIERhaGFiLCBSLjogRmFzdCBTb2Z0d2FyZQorIyBQb2x5bm9taWFsIE11bHRpcGxpY2F0aW9uIG9uIEFSTSBQcm9jZXNzb3JzIHVzaW5nIHRoZSBORU9OIEVuZ2luZS4KKyMgCisjIGh0dHA6Ly9jb25yYWRvcGxnLmNyeXB0b2xhbmQubmV0L2ZpbGVzLzIwMTAvMTIvbW9jcnlzZW4xMy5wZGYKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBOb3RlIGFib3V0ICI1MjhCIiB2YXJpYW50LiBJbiBBUk0gY2FzZSBpdCBtYWtlcyBsZXNzZXIgc2Vuc2UgdG8KQEAgLTMwMywxMTcgKzMxNywxNjAgQEAgJGNvZGUuPTw8X19fOwogLnNpemUJZ2NtX2dtdWx0XzRiaXQsLi1nY21fZ211bHRfNGJpdAogX19fCiB7Ci1teSAkY250PSRIdGJsOwkjICRIdGJsIGlzIHVzZWQgb25jZSBpbiB0aGUgdmVyeSBiZWdpbm5pbmcKLQotbXkgKCRIaGksICRIbG8sICRabywgJFQsICR4aSwgJG1vZCkgPSBtYXAoImQkXyIsKDAuLjcpKTsKLW15ICgkUWhpLCAkUWxvLCAkWiwgICRSLCAkemVybywgJFFwb3N0LCAkSU4pID0gbWFwKCJxJF8iLCg4Li4xNSkpOwotCi0jIFo6Wm8ga2VlcHMgMTI4LWJpdCByZXN1bHQgc2hpZnRlZCBieSAxIHRvIHRoZSByaWdodCwgd2l0aCBib3R0b20gYml0Ci0jIGluIFpvLiBPciBzaG91bGQgSSBzYXkgInRvcCBiaXQiLCBiZWNhdXNlIEdIQVNIIGlzIHNwZWNpZmllZCBpbgotIyByZXZlcnNlIGJpdCBvcmRlcj8gT3RoZXJ3aXNlIHN0cmFpZ2h0Zm9yd2FyZCAxMjgtYnQgSCBieSBvbmUgaW5wdXQKLSMgYnl0ZSBtdWx0aXBsaWNhdGlvbiBhbmQgbW9kdWxvLXJlZHVjdGlvbiwgdGltZXMgMTYuCitteSAoJFhsLCRYbSwkWGgsJElOKT1tYXAoInEkXyIsKDAuLjMpKTsKK215ICgkdDAsJHQxLCR0MiwkdDMpPW1hcCgicSRfIiwoOC4uMTIpKTsKK215ICgkSGxvLCRIaGksJEhobCwkazQ4LCRrMzIsJGsxNik9bWFwKCJkJF8iLCgyNi4uMzEpKTsKIAotc3ViIERsbygpICAgeyBzaGlmdD1+bXxxKFsxXT9bMC05XSl8PyJkIi4oJDEqMik6IiI7ICAgICB9Ci1zdWIgRGhpKCkgICB7IHNoaWZ0PX5tfHEoWzFdP1swLTldKXw/ImQiLigkMSoyKzEpOiIiOyAgIH0KLXN1YiBRKCkgICAgIHsgc2hpZnQ9fm18ZChbMS0zXT9bMDI0NjhdKXw/InEiLigkMS8yKToiIjsgfQorc3ViIGNsbXVsNjR4NjQgeworbXkgKCRyLCRhLCRiKT1AXzsKKyRjb2RlLj08PF9fXzsKKwl2ZXh0LjgJCSR0MCNsbywgJGEsICRhLCAjMQlAIEExCisJdm11bGwucDgJJHQwLCAkdDAjbG8sICRiCQlAIEYgPSBBMSpCCisJdmV4dC44CQkkciNsbywgJGIsICRiLCAjMQlAIEIxCisJdm11bGwucDgJJHIsICRhLCAkciNsbwkJQCBFID0gQSpCMQorCXZleHQuOAkJJHQxI2xvLCAkYSwgJGEsICMyCUAgQTIKKwl2bXVsbC5wOAkkdDEsICR0MSNsbywgJGIJCUAgSCA9IEEyKkIKKwl2ZXh0LjgJCSR0MyNsbywgJGIsICRiLCAjMglAIEIyCisJdm11bGwucDgJJHQzLCAkYSwgJHQzI2xvCQlAIEcgPSBBKkIyCisJdmV4dC44CQkkdDIjbG8sICRhLCAkYSwgIzMJQCBBMworCXZlb3IJCSR0MCwgJHQwLCAkcgkJQCBMID0gRSArIEYKKwl2bXVsbC5wOAkkdDIsICR0MiNsbywgJGIJCUAgSiA9IEEzKkIKKwl2ZXh0LjgJCSRyI2xvLCAkYiwgJGIsICMzCUAgQjMKKwl2ZW9yCQkkdDEsICR0MSwgJHQzCQlAIE0gPSBHICsgSAorCXZtdWxsLnA4CSRyLCAkYSwgJHIjbG8JCUAgSSA9IEEqQjMKKwl2ZW9yCQkkdDAjbG8sICR0MCNsbywgJHQwI2hpCUAgdDAgPSAoTCkgKFAwICsgUDEpIDw8IDgKKwl2YW5kCQkkdDAjaGksICR0MCNoaSwgJGs0OAorCXZleHQuOAkJJHQzI2xvLCAkYiwgJGIsICM0CUAgQjQKKwl2ZW9yCQkkdDEjbG8sICR0MSNsbywgJHQxI2hpCUAgdDEgPSAoTSkgKFAyICsgUDMpIDw8IDE2CisJdmFuZAkJJHQxI2hpLCAkdDEjaGksICRrMzIKKwl2bXVsbC5wOAkkdDMsICRhLCAkdDMjbG8JCUAgSyA9IEEqQjQKKwl2ZW9yCQkkdDIsICR0MiwgJHIJCUAgTiA9IEkgKyBKCisJdmVvcgkJJHQwI2xvLCAkdDAjbG8sICR0MCNoaQorCXZlb3IJCSR0MSNsbywgJHQxI2xvLCAkdDEjaGkKKwl2ZW9yCQkkdDIjbG8sICR0MiNsbywgJHQyI2hpCUAgdDIgPSAoTikgKFA0ICsgUDUpIDw8IDI0CisJdmFuZAkJJHQyI2hpLCAkdDIjaGksICRrMTYKKwl2ZXh0LjgJCSR0MCwgJHQwLCAkdDAsICMxNQorCXZlb3IJCSR0MyNsbywgJHQzI2xvLCAkdDMjaGkJQCB0MyA9IChLKSAoUDYgKyBQNykgPDwgMzIKKwl2bW92Lmk2NAkkdDMjaGksICMwCisJdmV4dC44CQkkdDEsICR0MSwgJHQxLCAjMTQKKwl2ZW9yCQkkdDIjbG8sICR0MiNsbywgJHQyI2hpCisJdm11bGwucDgJJHIsICRhLCAkYgkJQCBEID0gQSpCCisJdmV4dC44CQkkdDMsICR0MywgJHQzLCAjMTIKKwl2ZXh0LjgJCSR0MiwgJHQyLCAkdDIsICMxMworCXZlb3IJCSR0MCwgJHQwLCAkdDEKKwl2ZW9yCQkkdDIsICR0MiwgJHQzCisJdmVvcgkJJHIsICRyLCAkdDAKKwl2ZW9yCQkkciwgJHIsICR0MgorX19fCit9CiAKICRjb2RlLj08PF9fXzsKICNpZiBfX0FSTV9BUkNIX18+PTcKIC5mcHUJbmVvbgogCisuZ2xvYmFsCWdjbV9pbml0X25lb24KKy50eXBlCWdjbV9pbml0X25lb24sJWZ1bmN0aW9uCisuYWxpZ24JNAorZ2NtX2luaXRfbmVvbjoKKwl2bGQxLjY0CQkkSU4jaGksW3IxLDo2NF0hCUAgbG9hZCBICisJdm1vdi5pOAkJJHQwLCMweGUxCisJdmxkMS42NAkJJElOI2xvLFtyMSw6NjRdCisJdnNobC5pNjQJJHQwI2hpLCM1NworCXZzaHIudTY0CSR0MCNsbywjNjMJCUAgdDA9MHhjMi4uLi4wMQorCXZkdXAuOAkJJHQxLCRJTiNoaVs3XQorCXZzaHIudTY0CSRIbG8sJElOI2xvLCM2MworCXZzaHIuczgJCSR0MSwjNwkJCUAgYnJvYWRjYXN0IGNhcnJ5IGJpdAorCXZzaGwuaTY0CSRJTiwkSU4sIzEKKwl2YW5kCQkkdDAsJHQwLCR0MQorCXZvcnIJCSRJTiNoaSwkSGxvCQlAIEg8PDw9MQorCXZlb3IJCSRJTiwkSU4sJHQwCQlAIHR3aXN0ZWQgSAorCXZzdG1pYQkJcjAseyRJTn0KKworCXJldAkJCQkJQCBieCBscgorLnNpemUJZ2NtX2luaXRfbmVvbiwuLWdjbV9pbml0X25lb24KKwogLmdsb2JhbAlnY21fZ211bHRfbmVvbgogLnR5cGUJZ2NtX2dtdWx0X25lb24sJWZ1bmN0aW9uCiAuYWxpZ24JNAogZ2NtX2dtdWx0X25lb246Ci0Jc3ViCQkkSHRibCwjMTYJCUAgcG9pbnQgYXQgSCBpbiBHQ00xMjhfQ1RYCi0JdmxkMS42NAkJYCZEaGkoIiRJTiIpYCxbJFhpLDo2NF0hQCBsb2FkIFhpCi0Jdm1vdi5pMzIJJG1vZCwjMHhlMQkJQCBvdXIgaXJyZWR1Y2libGUgcG9seW5vbWlhbAotCXZsZDEuNjQJCWAmRGxvKCIkSU4iKWAsWyRYaSw6NjRdIQotCXZzaHIudTY0CSRtb2QsIzMyCi0JdmxkbWlhCQkkSHRibCx7JEhoaS0kSGxvfQlAIGxvYWQgSAotCXZlb3IJCSR6ZXJvLCR6ZXJvCisJdmxkMS42NAkJJElOI2hpLFskWGksOjY0XSEJQCBsb2FkIFhpCisJdmxkMS42NAkJJElOI2xvLFskWGksOjY0XSEKKwl2bW92Lmk2NAkkazQ4LCMweDAwMDBmZmZmZmZmZmZmZmYKKwl2bGRtaWEJCSRIdGJsLHskSGxvLSRIaGl9CUAgbG9hZCB0d2lzdGVkIEgKKwl2bW92Lmk2NAkkazMyLCMweDAwMDAwMDAwZmZmZmZmZmYKICNpZmRlZiBfX0FSTUVMX18KIAl2cmV2NjQuOAkkSU4sJElOCiAjZW5kaWYKLQl2ZW9yCQkkUXBvc3QsJFFwb3N0Ci0JdmVvcgkJJFIsJFIKLQltb3YJCSRjbnQsIzE2Ci0JdmVvcgkJJFosJFoKKwl2bW92Lmk2NAkkazE2LCMweDAwMDAwMDAwMDAwMGZmZmYKKwl2ZW9yCQkkSGhsLCRIbG8sJEhoaQkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKIAltb3YJCSRsZW4sIzE2Ci0JdmVvcgkJJFpvLCRabwotCXZkdXAuOAkJJHhpLGAmRGxvKCIkSU4iKWBbMF0JQCBicm9hZGNhc3QgbG93ZXN0IGJ5dGUKLQliCQkuTGlubmVyX25lb24KKwliCQkuTGdtdWx0X25lb24KIC5zaXplCWdjbV9nbXVsdF9uZW9uLC4tZ2NtX2dtdWx0X25lb24KIAogLmdsb2JhbAlnY21fZ2hhc2hfbmVvbgogLnR5cGUJZ2NtX2doYXNoX25lb24sJWZ1bmN0aW9uCiAuYWxpZ24JNAogZ2NtX2doYXNoX25lb246Ci0JdmxkMS42NAkJYCZEaGkoIiRaIilgLFskWGksOjY0XSEJQCBsb2FkIFhpCi0Jdm1vdi5pMzIJJG1vZCwjMHhlMQkJQCBvdXIgaXJyZWR1Y2libGUgcG9seW5vbWlhbAotCXZsZDEuNjQJCWAmRGxvKCIkWiIpYCxbJFhpLDo2NF0hCi0JdnNoci51NjQJJG1vZCwjMzIKLQl2bGRtaWEJCSRYaSx7JEhoaS0kSGxvfQkJQCBsb2FkIEgKLQl2ZW9yCQkkemVybywkemVybwotCW5vcAorCXZsZDEuNjQJCSRYbCNoaSxbJFhpLDo2NF0hCUAgbG9hZCBYaQorCXZsZDEuNjQJCSRYbCNsbyxbJFhpLDo2NF0hCisJdm1vdi5pNjQJJGs0OCwjMHgwMDAwZmZmZmZmZmZmZmZmCisJdmxkbWlhCQkkSHRibCx7JEhsby0kSGhpfQlAIGxvYWQgdHdpc3RlZCBICisJdm1vdi5pNjQJJGszMiwjMHgwMDAwMDAwMGZmZmZmZmZmCiAjaWZkZWYgX19BUk1FTF9fCi0JdnJldjY0LjgJJFosJFoKKwl2cmV2NjQuOAkkWGwsJFhsCiAjZW5kaWYKLS5Mb3V0ZXJfbmVvbjoKLQl2bGQxLjY0CQlgJkRoaSgkSU4pYCxbJGlucF0hCUAgbG9hZCBpbnAKLQl2ZW9yCQkkUXBvc3QsJFFwb3N0Ci0JdmxkMS42NAkJYCZEbG8oJElOKWAsWyRpbnBdIQotCXZlb3IJCSRSLCRSCi0JbW92CQkkY250LCMxNgorCXZtb3YuaTY0CSRrMTYsIzB4MDAwMDAwMDAwMDAwZmZmZgorCXZlb3IJCSRIaGwsJEhsbywkSGhpCQlAIEthcmF0c3ViYSBwcmUtcHJvY2Vzc2luZworCisuTG9vcF9uZW9uOgorCXZsZDEuNjQJCSRJTiNoaSxbJGlucF0hCQlAIGxvYWQgaW5wCisJdmxkMS42NAkJJElOI2xvLFskaW5wXSEKICNpZmRlZiBfX0FSTUVMX18KIAl2cmV2NjQuOAkkSU4sJElOCiAjZW5kaWYKLQl2ZW9yCQkkWm8sJFpvCi0JdmVvcgkJJElOLCRaCQkJQCBpbnBePVhpCi0JdmVvcgkJJFosJFoKLQl2ZHVwLjgJCSR4aSxgJkRsbygiJElOIilgWzBdCUAgYnJvYWRjYXN0IGxvd2VzdCBieXRlCi0uTGlubmVyX25lb246Ci0Jc3VicwkJJGNudCwkY250LCMxCi0Jdm11bGwucDgJJFFsbywkSGxvLCR4aQkJQCBILmxvt1hpW2ldCi0Jdm11bGwucDgJJFFoaSwkSGhpLCR4aQkJQCBILmhpt1hpW2ldCi0JdmV4dC44CQkkSU4sJHplcm8sIzEJCUAgSU4+Pj04Ci0KLQl2ZW9yCQkkWiwkUXBvc3QJCUAgbW9kdWxvLXNjaGVkdWxlZCBwYXJ0Ci0JdnNobC5pNjQJYCZEbG8oIiRSIilgLCM0OAotCXZkdXAuOAkJJHhpLGAmRGxvKCIkSU4iKWBbMF0JQCBicm9hZGNhc3QgbG93ZXN0IGJ5dGUKLQl2ZW9yCQkkVCxgJkRsbygiJFFsbyIpYCxgJkRsbygiJFoiKWAKLQotCXZlb3IJCWAmRGhpKCIkWiIpYCxgJkRsbygiJFIiKWAKLQl2dXpwLjgJCSRRbG8sJFFoaQotCXZzbGkuOAkJJFpvLCRULCMxCQlAIGNvbXBvc2UgdGhlICJjYXJyeSIgYnl0ZQotCXZleHQuOAkJJFosJHplcm8sIzEJCUAgWj4+PTgKLQotCXZtdWxsLnA4CSRSLCRabywkbW9kCQlAICJjYXJyeSK3MHhlMQotCXZzaHIudTgJCSRabywkVCwjNwkJQCBzYXZlIFoncyBib3R0b20gYml0Ci0JdmV4dC44CQkkUXBvc3QsJFFsbywkemVybywjMQlAIFFsbz4+PTgKLQl2ZW9yCQkkWiwkUWhpCi0JYm5lCQkuTGlubmVyX25lb24KLQotCXZlb3IJCSRaLCRRcG9zdAkJQCBtb2R1bG8tc2NoZWR1bGVkIGFydGVmYWN0Ci0JdnNobC5pNjQJYCZEbG8oIiRSIilgLCM0OAotCXZlb3IJCWAmRGhpKCIkWiIpYCxgJkRsbygiJFIiKWAKLQotCUAgZmluYWxpemF0aW9uLCBub3JtYWxpemUgWjpabwotCXZhbmQJCSRabywkbW9kCQlAIHN1ZmZpY2VzIHRvIG1hc2sgdGhlIGJpdAotCXZzaHIudTY0CWAmRGhpKCZRKCIkWm8iKSlgLGAmRGxvKCIkWiIpYCwjNjMKLQl2c2hsLmk2NAkkWiwjMQorCXZlb3IJCSRJTiwkWGwJCQlAIGlucF49WGkKKy5MZ211bHRfbmVvbjoKK19fXworCSZjbG11bDY0eDY0CSgkWGwsJEhsbywiJElOI2xvIik7CSMgSC5sb7dYaS5sbworJGNvZGUuPTw8X19fOworCXZlb3IJCSRJTiNsbywkSU4jbG8sJElOI2hpCUAgS2FyYXRzdWJhIHByZS1wcm9jZXNzaW5nCitfX18KKwkmY2xtdWw2NHg2NAkoJFhtLCRIaGwsIiRJTiNsbyIpOwkjIChILmxvK0guaGkptyhYaS5sbytYaS5oaSkKKwkmY2xtdWw2NHg2NAkoJFhoLCRIaGksIiRJTiNoaSIpOwkjIEguaGm3WGkuaGkKKyRjb2RlLj08PF9fXzsKKwl2ZW9yCQkkWG0sJFhtLCRYbAkJQCBLYXJhdHN1YmEgcG9zdC1wcm9jZXNzaW5nCisJdmVvcgkJJFhtLCRYbSwkWGgKKwl2ZW9yCQkkWGwjaGksJFhsI2hpLCRYbSNsbworCXZlb3IJCSRYaCNsbywkWGgjbG8sJFhtI2hpCUAgWGh8WGwgLSAyNTYtYml0IHJlc3VsdAorCisJQCBlcXVpdmFsZW50IG9mIHJlZHVjdGlvbl9hdnggZnJvbSBnaGFzaC14ODZfNjQucGwKKwl2c2hsLmk2NAkkdDEsJFhsLCM1NwkJQCAxc3QgcGhhc2UKKwl2c2hsLmk2NAkkdDIsJFhsLCM2MgorCXZlb3IJCSR0MiwkdDIsJHQxCQlACisJdnNobC5pNjQJJHQxLCRYbCwjNjMKKwl2ZW9yCQkkdDIsICR0MiwgJHQxCQlACisgCXZlb3IJCSRYbCNoaSwkWGwjaGksJHQyI2xvCUAKKwl2ZW9yCQkkWGgjbG8sJFhoI2xvLCR0MiNoaQorCisJdnNoci51NjQJJHQyLCRYbCwjMQkJQCAybmQgcGhhc2UKKwl2ZW9yCQkkWGgsJFhoLCRYbAorCXZlb3IJCSRYbCwkWGwsJHQyCQlACisJdnNoci51NjQJJHQyLCR0MiwjNgorCXZzaHIudTY0CSRYbCwkWGwsIzEJCUAKKwl2ZW9yCQkkWGwsJFhsLCRYaAkJQAorCXZlb3IJCSRYbCwkWGwsJHQyCQlACisKIAlzdWJzCQkkbGVuLCMxNgotCXZvcnIJCSRaLGAmUSgiJFpvIilgCQlAIFo9Wjpabzw8MQotCWJuZQkJLkxvdXRlcl9uZW9uCisJYm5lCQkuTG9vcF9uZW9uCiAKICNpZmRlZiBfX0FSTUVMX18KLQl2cmV2NjQuOAkkWiwkWgorCXZyZXY2NC44CSRYbCwkWGwKICNlbmRpZgogCXN1YgkJJFhpLCMxNgkKLQl2c3QxLjY0CQlgJkRoaSgiJFoiKWAsWyRYaSw6NjRdIQlAIHdyaXRlIG91dCBYaQotCXZzdDEuNjQJCWAmRGxvKCIkWiIpYCxbJFhpLDo2NF0KKwl2c3QxLjY0CQkkWGwjaGksWyRYaSw6NjRdIQlAIHdyaXRlIG91dCBYaQorCXZzdDEuNjQJCSRYbCNsbyxbJFhpLDo2NF0KIAotCWJ4CWxyCisJcmV0CQkJCQlAIGJ4IGxyCiAuc2l6ZQlnY21fZ2hhc2hfbmVvbiwuLWdjbV9naGFzaF9uZW9uCiAjZW5kaWYKIF9fXwpAQCAtNDIzLDcgKzQ4MCwxMyBAQCAkY29kZS49PDxfX187CiAuYWxpZ24gIDIKIF9fXwogCi0kY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKLSRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0Ci1wcmludCAkY29kZTsKK2ZvcmVhY2ggKHNwbGl0KCJcbiIsJGNvZGUpKSB7CisJcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW87CisKKwlzL1xicShbMC05XSspIyhsb3xoaSkvc3ByaW50ZiAiZCVkIiwyKiQxKygkMiBlcSAiaGkiKS9nZW8Jb3IKKwlzL1xicmV0XGIvYngJbHIvZ28JCW9yCisJcy9cYmJ4XHMrbHJcYi8ud29yZFx0MHhlMTJmZmYxZS9nbzsgICAgIyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCAtbWFyY2g9YXJtdjQKKworCXByaW50ICRfLCJcbiI7Cit9CiBjbG9zZSBTVERPVVQ7ICMgZW5mb3JjZSBmbHVzaApkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2FzbS9naGFzaHY4LWFybXgucGwgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNodjgtYXJteC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjRmM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL21vZGVzL2FzbS9naGFzaHY4LWFybXgucGwKQEAgLTAsMCArMSwyNDAgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIEdIQVNIIGZvciBBUk12OCBDcnlwdG8gRXh0ZW5zaW9uLCA2NC1iaXQgcG9seW5vbWlhbCBtdWx0aXBsaWNhdGlvbi4KKyMKKyMgSnVuZSAyMDE0CisjCisjIEluaXRpYWwgdmVyc2lvbiB3YXMgZGV2ZWxvcGVkIGluIHRpZ2h0IGNvb3BlcmF0aW9uIHdpdGggQXJkCisjIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+IGZyb20gYml0cy1uLXBpZWNlcyBmcm9tCisjIG90aGVyIGFzc2VtYmx5IG1vZHVsZXMuIEp1c3QgbGlrZSBhZXN2OC1hcm14LnBsIHRoaXMgbW9kdWxlCisjIHN1cHBvcnRzIGJvdGggQUFyY2gzMiBhbmQgQUFyY2g2NCBleGVjdXRpb24gbW9kZXMuCisjCisjIEN1cnJlbnQgcGVyZm9ybWFuY2UgaW4gY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZToKKyMKKyMJCVBNVUxMWzJdCTMyLWJpdCBORU9OKCopCisjIEFwcGxlIEE3CTEuNzYJCTUuNjIKKyMgQ29ydGV4LUE1eAluL2EJCW4vYQorIworIyAoKikJcHJlc2VudGVkIGZvciByZWZlcmVuY2UvY29tcGFyaXNvbiBwdXJwb3NlczsKKworJGZsYXZvdXIgPSBzaGlmdDsKK29wZW4gU1RET1VULCI+Ii5zaGlmdDsKKworJFhpPSJ4MCI7CSMgYXJndW1lbnQgYmxvY2sKKyRIdGJsPSJ4MSI7CiskaW5wPSJ4MiI7CiskbGVuPSJ4MyI7CisKKyRpbmM9IngxMiI7CisKK3sKK215ICgkWGwsJFhtLCRYaCwkSU4pPW1hcCgicSRfIiwoMC4uMykpOworbXkgKCR0MCwkdDEsJHQyLCR0MywkSCwkSGhsKT1tYXAoInEkXyIsKDguLjE0KSk7CisKKyRjb2RlPTw8X19fOworI2luY2x1ZGUgImFybV9hcmNoLmgiCisKKy50ZXh0CitfX18KKyRjb2RlLj0iLmFyY2gJYXJtdjgtYStjcnlwdG9cbiIJaWYgKCRmbGF2b3VyID1+IC82NC8pOworJGNvZGUuPSIuZnB1CW5lb25cbi5jb2RlCTMyXG4iCWlmICgkZmxhdm91ciAhfiAvNjQvKTsKKworJGNvZGUuPTw8X19fOworLmdsb2JhbAlnY21faW5pdF92OAorLnR5cGUJZ2NtX2luaXRfdjgsJWZ1bmN0aW9uCisuYWxpZ24JNAorZ2NtX2luaXRfdjg6CisJdmxkMS42NAkJeyR0MX0sW3gxXQkJQCBsb2FkIEgKKwl2bW92Lmk4CQkkdDAsIzB4ZTEKKwl2ZXh0LjgJCSRJTiwkdDEsJHQxLCM4CisJdnNobC5pNjQJJHQwLCR0MCwjNTcKKwl2c2hyLnU2NAkkdDIsJHQwLCM2MworCXZleHQuOAkJJHQwLCR0MiwkdDAsIzgJCUAgdDA9MHhjMi4uLi4wMQorCXZkdXAuMzIJCSR0MSwke3QxfVsxXQorCXZzaHIudTY0CSR0MywkSU4sIzYzCisJdnNoci5zMzIJJHQxLCR0MSwjMzEJCUAgYnJvYWRjYXN0IGNhcnJ5IGJpdAorCXZhbmQJCSR0MywkdDMsJHQwCisJdnNobC5pNjQJJElOLCRJTiwjMQorCXZleHQuOAkJJHQzLCR0MywkdDMsIzgKKwl2YW5kCQkkdDAsJHQwLCR0MQorCXZvcnIJCSRJTiwkSU4sJHQzCQlAIEg8PDw9MQorCXZlb3IJCSRJTiwkSU4sJHQwCQlAIHR3aXN0ZWQgSAorCXZzdDEuNjQJCXskSU59LFt4MF0KKworCXJldAorLnNpemUJZ2NtX2luaXRfdjgsLi1nY21faW5pdF92OAorCisuZ2xvYmFsCWdjbV9nbXVsdF92OAorLnR5cGUJZ2NtX2dtdWx0X3Y4LCVmdW5jdGlvbgorLmFsaWduCTQKK2djbV9nbXVsdF92ODoKKwl2bGQxLjY0CQl7JHQxfSxbJFhpXQkJQCBsb2FkIFhpCisJdm1vdi5pOAkJJHQzLCMweGUxCisJdmxkMS42NAkJeyRIfSxbJEh0YmxdCQlAIGxvYWQgdHdpc3RlZCBICisJdnNobC51NjQJJHQzLCR0MywjNTcKKyNpZm5kZWYgX19BUk1FQl9fCisJdnJldjY0LjgJJHQxLCR0MQorI2VuZGlmCisJdmV4dC44CQkkSGhsLCRILCRILCM4CisJbW92CQkkbGVuLCMwCisJdmV4dC44CQkkSU4sJHQxLCR0MSwjOAorCW1vdgkJJGluYywjMAorCXZlb3IJCSRIaGwsJEhobCwkSAkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKKwltb3YJCSRpbnAsJFhpCisJYgkJLkxnbXVsdF92OAorLnNpemUJZ2NtX2dtdWx0X3Y4LC4tZ2NtX2dtdWx0X3Y4CisKKy5nbG9iYWwJZ2NtX2doYXNoX3Y4CisudHlwZQlnY21fZ2hhc2hfdjgsJWZ1bmN0aW9uCisuYWxpZ24JNAorZ2NtX2doYXNoX3Y4OgorCXZsZDEuNjQJCXskWGx9LFskWGldCQlAIGxvYWQgW3JvdGF0ZWRdIFhpCisJc3VicwkJJGxlbiwkbGVuLCMxNgorCXZtb3YuaTgJCSR0MywjMHhlMQorCW1vdgkJJGluYywjMTYKKwl2bGQxLjY0CQl7JEh9LFskSHRibF0JCUAgbG9hZCB0d2lzdGVkIEgKKwljY2xyCQkkaW5jLGVxCisJdmV4dC44CQkkWGwsJFhsLCRYbCwjOAorCXZzaGwudTY0CSR0MywkdDMsIzU3CisJdmxkMS42NAkJeyR0MX0sWyRpbnBdLCRpbmMJQCBsb2FkIFtyb3RhdGVkXSBpbnAKKwl2ZXh0LjgJCSRIaGwsJEgsJEgsIzgKKyNpZm5kZWYgX19BUk1FQl9fCisJdnJldjY0LjgJJFhsLCRYbAorCXZyZXY2NC44CSR0MSwkdDEKKyNlbmRpZgorCXZlb3IJCSRIaGwsJEhobCwkSAkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKKwl2ZXh0LjgJCSRJTiwkdDEsJHQxLCM4CisJYgkJLkxvb3BfdjgKKworLmFsaWduCTQKKy5Mb29wX3Y4OgorCXZleHQuOAkJJHQyLCRYbCwkWGwsIzgKKwl2ZW9yCQkkSU4sJElOLCRYbAkJQCBpbnBePVhpCisJdmVvcgkJJHQxLCR0MSwkdDIJCUAgJHQxIGlzIHJvdGF0ZWQgaW5wXlhpCisKKy5MZ211bHRfdjg6CisJdnBtdWxsLnA2NAkkWGwsJEgsJElOCQlAIEgubG+3WGkubG8KKwl2ZW9yCQkkdDEsJHQxLCRJTgkJQCBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKKwl2cG11bGwyLnA2NAkkWGgsJEgsJElOCQlAIEguaGm3WGkuaGkKKwlzdWJzCQkkbGVuLCRsZW4sIzE2CisJdnBtdWxsLnA2NAkkWG0sJEhobCwkdDEJCUAgKEgubG8rSC5oaSm3KFhpLmxvK1hpLmhpKQorCWNjbHIJCSRpbmMsZXEKKworCXZleHQuOAkJJHQxLCRYbCwkWGgsIzgJCUAgS2FyYXRzdWJhIHBvc3QtcHJvY2Vzc2luZworCXZlb3IJCSR0MiwkWGwsJFhoCisJdmVvcgkJJFhtLCRYbSwkdDEKKwkgdmxkMS42NAl7JHQxfSxbJGlucF0sJGluYwlAIGxvYWQgW3JvdGF0ZWRdIGlucAorCXZlb3IJCSRYbSwkWG0sJHQyCisJdnBtdWxsLnA2NAkkdDIsJFhsLCR0MwkJQCAxc3QgcGhhc2UKKworCXZtb3YJCSRYaCNsbywkWG0jaGkJCUAgWGh8WG0gLSAyNTYtYml0IHJlc3VsdAorCXZtb3YJCSRYbSNoaSwkWGwjbG8JCUAgWG0gaXMgcm90YXRlZCBYbAorI2lmbmRlZiBfX0FSTUVCX18KKwkgdnJldjY0LjgJJHQxLCR0MQorI2VuZGlmCisJdmVvcgkJJFhsLCRYbSwkdDIKKwkgdmV4dC44CQkkSU4sJHQxLCR0MSwjOAorCisJdmV4dC44CQkkdDIsJFhsLCRYbCwjOAkJQCAybmQgcGhhc2UKKwl2cG11bGwucDY0CSRYbCwkWGwsJHQzCisJdmVvcgkJJHQyLCR0MiwkWGgKKwl2ZW9yCQkkWGwsJFhsLCR0MgorCWIuaHMJCS5Mb29wX3Y4CisKKyNpZm5kZWYgX19BUk1FQl9fCisJdnJldjY0LjgJJFhsLCRYbAorI2VuZGlmCisJdmV4dC44CQkkWGwsJFhsLCRYbCwjOAorCXZzdDEuNjQJCXskWGx9LFskWGldCQlAIHdyaXRlIG91dCBYaQorCisJcmV0Cisuc2l6ZQlnY21fZ2hhc2hfdjgsLi1nY21fZ2hhc2hfdjgKK19fXworfQorJGNvZGUuPTw8X19fOworLmFzY2l6ICAiR0hBU0ggZm9yIEFSTXY4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduICAyCitfX18KKworaWYgKCRmbGF2b3VyID1+IC82NC8pIHsJCQkjIyMjIyMjIyA2NC1iaXQgY29kZQorICAgIHN1YiB1bnZtb3YgeworCW15ICRhcmc9c2hpZnQ7CisKKwkkYXJnID1+IG0vcShbMC05XSspIyhsb3xoaSksXHMqcShbMC05XSspIyhsb3xoaSkvbyAmJgorCXNwcmludGYJImlucwl2JWQuZFslZF0sdiVkLmRbJWRdIiwkMSwoJDIgZXEgImxvIik/MDoxLCQzLCgkNCBlcSAibG8iKT8wOjE7CisgICAgfQorICAgIGZvcmVhY2goc3BsaXQoIlxuIiwkY29kZSkpIHsKKwlzL2NjbHJccysoW3d4XSkoW14sXSspLFxzKihbYS16XSspL2NzZWwJJDEkMiwkMXpyLCQxJDIsJDMvbwlvcgorCXMvdm1vdlwuaTgvbW92aS9vCQlvcgkjIGZpeCB1cCBsZWdhY3kgbW5lbW9uaWNzCisJcy92bW92XHMrKC4qKS91bnZtb3YoJDEpL2dlbwlvcgorCXMvdmV4dFwuOC9leHQvbwkJCW9yCisJcy92c2hyXC5zL3NzaHJcLnMvbwkJb3IKKwlzL3ZzaHIvdXNoci9vCQkJb3IKKwlzL14oXHMrKXYvJDEvbwkJCW9yCSMgc3RyaXAgb2ZmIHYgcHJlZml4CisJcy9cYmJ4XHMrbHJcYi9yZXQvbzsKKworCXMvXGJxKFswLTldKylcYi8idiIuKCQxPDg/JDE6JDErOCkuIi4xNmIiL2dlbzsJIyBvbGQtPm5ldyByZWdpc3RlcnMKKwlzL0Bccy9cL1wvL287CQkJCSMgb2xkLT5uZXcgc3R5bGUgY29tbWVudGFyeQorCisJIyBmaXggdXAgcmVtYWluaWcgbGVnYWN5IHN1ZmZpeGVzCisJcy9cLlt1aV0/OChccykvJDEvbzsKKwlzL1wuW3Vpc10/MzIvL28gYW5kIHMvXC4xNmIvXC40cy9nbzsKKwltL1wucDY0L28gYW5kIHMvXC4xNmIvXC4xcS9vOwkJIyAxc3QgcG11bGwgYXJndW1lbnQKKwltL2xcLnA2NC9vIGFuZCBzL1wuMTZiL1wuMWQvZ287CQkjIDJuZCBhbmQgM3JkIHBtdWxsIGFyZ3VtZW50cworCXMvXC5bdWlzcF0/NjQvL28gYW5kIHMvXC4xNmIvXC4yZC9nbzsKKwlzL1wuWzQyXShbc2RdKVxbKFswLTNdKVxdL1wuJDFcWyQyXF0vbzsKKworCXByaW50ICRfLCJcbiI7CisgICAgfQorfSBlbHNlIHsJCQkJIyMjIyMjIyMgMzItYml0IGNvZGUKKyAgICBzdWIgdW52ZHVwMzIgeworCW15ICRhcmc9c2hpZnQ7CisKKwkkYXJnID1+IG0vcShbMC05XSspLFxzKnEoWzAtOV0rKVxbKFswLTNdKVxdL28gJiYKKwlzcHJpbnRmCSJ2ZHVwLjMyCXElZCxkJWRbJWRdIiwkMSwyKiQyKygkMz4+MSksJDMmMTsKKyAgICB9CisgICAgc3ViIHVudnBtdWxscDY0IHsKKwlteSAoJG1uZW1vbmljLCRhcmcpPUBfOworCisJaWYgKCRhcmcgPX4gbS9xKFswLTldKyksXHMqcShbMC05XSspLFxzKnEoWzAtOV0rKS9vKSB7CisJICAgIG15ICR3b3JkID0gMHhmMmEwMGUwMHwoKCQxJjcpPDwxMyl8KCgkMSY4KTw8MTkpCisJCQkJIHwoKCQyJjcpPDwxNyl8KCgkMiY4KTw8NCkKKwkJCQkgfCgoJDMmNyk8PDEpIHwoKCQzJjgpPDwyKTsKKwkgICAgJHdvcmQgfD0gMHgwMDAxMDAwMQkgaWYgKCRtbmVtb25pYyA9fiAiMiIpOworCSAgICAjIHNpbmNlIEFSTXY3IGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIGVuY29kZWQgbGl0dGxlLWVuZGlhbi4KKwkgICAgIyBjb3JyZWN0IHNvbHV0aW9uIGlzIHRvIHVzZSAuaW5zdCBkaXJlY3RpdmUsIGJ1dCBvbGRlcgorCSAgICAjIGFzc2VtYmxlcnMgZG9uJ3QgaW1wbGVtZW50IGl0Oi0oCisJICAgIHNwcmludGYgIi5ieXRlXHQweCUwMngsMHglMDJ4LDB4JTAyeCwweCUwMnhcdEAgJXMgJXMiLAorCQkJJHdvcmQmMHhmZiwoJHdvcmQ+PjgpJjB4ZmYsCisJCQkoJHdvcmQ+PjE2KSYweGZmLCgkd29yZD4+MjQpJjB4ZmYsCisJCQkkbW5lbW9uaWMsJGFyZzsKKwl9CisgICAgfQorCisgICAgZm9yZWFjaChzcGxpdCgiXG4iLCRjb2RlKSkgeworCXMvXGJbd3hdKFswLTldKylcYi9yJDEvZ287CQkjIG5ldy0+b2xkIHJlZ2lzdGVycworCXMvXGJ2KFswLTldKVwuWzEyNDY4XStbYnNkXVxiL3EkMS9nbzsJIyBuZXctPm9sZCByZWdpc3RlcnMKKyAgICAgICAgcy9cL1wvXHM/L0AgL287CQkJCSMgbmV3LT5vbGQgc3R5bGUgY29tbWVudGFyeQorCisJIyBmaXggdXAgcmVtYWluaWcgbmV3LXN0eWxlIHN1ZmZpeGVzCisJcy9cXSwjWzAtOV0rL10hL287CisKKwlzL2NjbHJccysoW14sXSspLFxzKihbYS16XSspL21vdiQyCSQxLCMwL28JCQlvcgorCXMvdmR1cFwuMzJccysoLiopL3VudmR1cDMyKCQxKS9nZW8JCQkJb3IKKwlzL3Y/KHBtdWxsMj8pXC5wNjRccysoLiopL3VudnBtdWxscDY0KCQxLCQyKS9nZW8JCW9yCisJcy9cYnEoWzAtOV0rKSMobG98aGkpL3NwcmludGYgImQlZCIsMiokMSsoJDIgZXEgImhpIikvZ2VvCW9yCisJcy9eKFxzKyliXC4vJDFiL28JCQkJCQlvcgorCXMvXihccyspcmV0LyQxYnhcdGxyL287CisKKyAgICAgICAgcHJpbnQgJF8sIlxuIjsKKyAgICB9Cit9CisKK2Nsb3NlIFNURE9VVDsgIyBlbmZvcmNlIGZsdXNoCmRpZmYgLS1naXQgYS9jcnlwdG8vbW9kZXMvZ2NtMTI4LmMgYi9jcnlwdG8vbW9kZXMvZ2NtMTI4LmMKaW5kZXggZTFkYzJiMC4uNzllYmI2NiAxMDA2NDQKLS0tIGEvY3J5cHRvL21vZGVzL2djbTEyOC5jCisrKyBiL2NyeXB0by9tb2Rlcy9nY20xMjguYwpAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyB2b2lkIGdjbV9nbXVsdF8xYml0KHU2NCBYaVsyXSxjb25zdCB1NjQgSFsyXSkKIAogI2VuZGlmCiAKLSNpZglUQUJMRV9CSVRTPT00ICYmIGRlZmluZWQoR0hBU0hfQVNNKQorI2lmCVRBQkxFX0JJVFM9PTQgJiYgKGRlZmluZWQoR0hBU0hfQVNNKSB8fCBkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JKKSkKICMgaWYJIWRlZmluZWQoSTM4Nl9PTkxZKSAmJiBcCiAJKGRlZmluZWQoX19pMzg2KQl8fCBkZWZpbmVkKF9faTM4Nl9fKQl8fCBcCiAJIGRlZmluZWQoX194ODZfNjQpCXx8IGRlZmluZWQoX194ODZfNjRfXykJfHwgXApAQCAtNjYzLDEzICs2NjMsMjEgQEAgdm9pZCBnY21fZ2hhc2hfNGJpdF9tbXgodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSxjb25zdCB1OCAqaW5wLHNpemVfdCBsZW4KIHZvaWQgZ2NtX2dtdWx0XzRiaXRfeDg2KHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0pOwogdm9pZCBnY21fZ2hhc2hfNGJpdF94ODYodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSxjb25zdCB1OCAqaW5wLHNpemVfdCBsZW4pOwogIyAgZW5kaWYKLSMgZWxpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pCisjIGVsaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogIyAgaW5jbHVkZSAiYXJtX2FyY2guaCIKICMgIGlmIF9fQVJNX0FSQ0hfXz49NwogIyAgIGRlZmluZSBHSEFTSF9BU01fQVJNCiAjICAgZGVmaW5lIEdDTV9GVU5DUkVGXzRCSVQKKyMgICBkZWZpbmUgUE1VTExfQ0FQQUJMRQkoT1BFTlNTTF9hcm1jYXBfUCAmIEFSTVY4X1BNVUxMKQorIyAgIGlmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkKKyMgICAgZGVmaW5lIE5FT05fQ0FQQUJMRQkoT1BFTlNTTF9hcm1jYXBfUCAmIEFSTVY3X05FT04pCisjICAgZW5kaWYKK3ZvaWQgZ2NtX2luaXRfbmVvbih1MTI4IEh0YWJsZVsxNl0sY29uc3QgdTY0IFhpWzJdKTsKIHZvaWQgZ2NtX2dtdWx0X25lb24odTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSk7CiB2b2lkIGdjbV9naGFzaF9uZW9uKHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0sY29uc3QgdTggKmlucCxzaXplX3QgbGVuKTsKK3ZvaWQgZ2NtX2luaXRfdjgodTEyOCBIdGFibGVbMTZdLGNvbnN0IHU2NCBYaVsyXSk7Cit2b2lkIGdjbV9nbXVsdF92OCh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdKTsKK3ZvaWQgZ2NtX2doYXNoX3Y4KHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0sY29uc3QgdTggKmlucCxzaXplX3QgbGVuKTsKICMgIGVuZGlmCiAjIGVuZGlmCiAjZW5kaWYKQEAgLTczOSwxMCArNzQ3LDIxIEBAIHZvaWQgQ1JZUFRPX2djbTEyOF9pbml0KEdDTTEyOF9DT05URVhUICpjdHgsdm9pZCAqa2V5LGJsb2NrMTI4X2YgYmxvY2spCiAJY3R4LT5naGFzaCA9IGdjbV9naGFzaF80Yml0OwogIyAgZW5kaWYKICMgZWxpZglkZWZpbmVkKEdIQVNIX0FTTV9BUk0pCi0JaWYgKE9QRU5TU0xfYXJtY2FwX1AgJiBBUk1WN19ORU9OKSB7CisjICBpZmRlZiBQTVVMTF9DQVBBQkxFCisJaWYgKFBNVUxMX0NBUEFCTEUpIHsKKwkJZ2NtX2luaXRfdjgoY3R4LT5IdGFibGUsY3R4LT5ILnUpOworCQljdHgtPmdtdWx0ID0gZ2NtX2dtdWx0X3Y4OworCQljdHgtPmdoYXNoID0gZ2NtX2doYXNoX3Y4OworCX0gZWxzZQorIyAgZW5kaWYKKyMgIGlmZGVmIE5FT05fQ0FQQUJMRQorCWlmIChORU9OX0NBUEFCTEUpIHsKKwkJZ2NtX2luaXRfbmVvbihjdHgtPkh0YWJsZSxjdHgtPkgudSk7CiAJCWN0eC0+Z211bHQgPSBnY21fZ211bHRfbmVvbjsKIAkJY3R4LT5naGFzaCA9IGdjbV9naGFzaF9uZW9uOwotCX0gZWxzZSB7CisJfSBlbHNlCisjICBlbmRpZgorCXsKIAkJZ2NtX2luaXRfNGJpdChjdHgtPkh0YWJsZSxjdHgtPkgudSk7CiAJCWN0eC0+Z211bHQgPSBnY21fZ211bHRfNGJpdDsKIAkJY3R4LT5naGFzaCA9IGdjbV9naGFzaF80Yml0OwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9NYWtlZmlsZSBiL2NyeXB0by9zaGEvTWFrZWZpbGUKaW5kZXggMmViMmI3YS4uNmVmMDI3ZCAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9NYWtlZmlsZQorKysgYi9jcnlwdG8vc2hhL01ha2VmaWxlCkBAIC05Miw2ICs5Miw5IEBAIHNoYTUxMi0lLlM6CWFzbS9zaGE1MTItJS5wbDsJJChQRVJMKSAkPCAkKFBFUkxBU01fU0NIRU1FKSAkQAogc2hhMS1hcm12NC1sYXJnZS5vOglzaGExLWFybXY0LWxhcmdlLlMKIHNoYTI1Ni1hcm12NC5vOgkJc2hhMjU2LWFybXY0LlMKIHNoYTUxMi1hcm12NC5vOgkJc2hhNTEyLWFybXY0LlMKK3NoYTEtYXJtdjgubzoJCXNoYTEtYXJtdjguUworc2hhMjU2LWFybXY4Lm86CQlzaGEyNTYtYXJtdjguUworc2hhNTEyLWFybXY4Lm86CQlzaGE1MTItYXJtdjguUwogCiBmaWxlczoKIAkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucGwKaW5kZXggMzNkYTNlMC4uNTBiZDA3YiAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGExLWFybXY0LWxhcmdlLnBsCkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jpbi9lbnYgcGVybAogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKICMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAogIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgogIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KQEAgLTUyLDYgKzUyLDIwIEBACiAjIFByb2ZpbGVyLWFzc2lzdGVkIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gcmVzdWx0ZWQgaW4gMTAlCiAjIGltcHJvdmVtZW50IG9uIENvcnRleCBBOCBjb3JlIGFuZCAxMi4yIGN5Y2xlcyBwZXIgYnl0ZS4KIAorIyBTZXB0ZW1iZXIgMjAxMy4KKyMKKyMgQWRkIE5FT04gaW1wbGVtZW50YXRpb24gKHNlZSBzaGExLTU4Ni5wbCBmb3IgYmFja2dyb3VuZCBpbmZvKS4gT24KKyMgQ29ydGV4IEE4IGl0IHdhcyBtZWFzdXJlZCB0byBwcm9jZXNzIG9uZSBieXRlIGluIDYuNyBjeWNsZXMgb3IgPjgwJQorIyBmYXN0ZXIgdGhhbiBpbnRlZ2VyLW9ubHkgY29kZS4gQmVjYXVzZSBbZnVsbHkgdW5yb2xsZWRdIE5FT04gY29kZQorIyBpcyB+Mi41eCBsYXJnZXIgYW5kIHRoZXJlIGFyZSBzb21lIHJlZHVuZGFudCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKKyMgd2hlbiBwcm9jZXNzaW5nIGxhc3QgYmxvY2ssIGltcHJvdmVtZW50IGlzIG5vdCBhcyBiaWcgZm9yIHNtYWxsZXN0CisjIGJsb2Nrcywgb25seSB+MzAlLiBTbmFwZHJhZ29uIFM0IGlzIGEgdGFkIGZhc3RlciwgNi40IGN5Y2xlcyBwZXIKKyMgYnl0ZSwgd2hpY2ggaXMgYWxzbyA+ODAlIGZhc3RlciB0aGFuIGludGVnZXItb25seSBjb2RlLgorCisjIE1heSAyMDE0LgorIworIyBBZGQgQVJNdjggY29kZSBwYXRoIHBlcmZvcm1pbmcgYXQgMi4zNSBjcGIgb24gQXBwbGUgQTcuCisKIHdoaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9eXHdbXHdcLV0qXC5cdyskLykpIHt9CiBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOwogCkBAIC0xNTMsMTIgKzE2NywyMiBAQCAkY29kZT08PF9fXzsKICNpbmNsdWRlICJhcm1fYXJjaC5oIgogCiAudGV4dAorLmNvZGUJMzIKIAogLmdsb2JhbAlzaGExX2Jsb2NrX2RhdGFfb3JkZXIKIC50eXBlCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwlZnVuY3Rpb24KIAotLmFsaWduCTIKKy5hbGlnbgk1CiBzaGExX2Jsb2NrX2RhdGFfb3JkZXI6CisjaWYgX19BUk1fQVJDSF9fPj03CisJc3ViCXIzLHBjLCM4CQlAIHNoYTFfYmxvY2tfZGF0YV9vcmRlcgorCWxkcglyMTIsLkxPUEVOU1NMX2FybWNhcAorCWxkcglyMTIsW3IzLHIxMl0JCUAgT1BFTlNTTF9hcm1jYXBfUAorCXRzdAlyMTIsI0FSTVY4X1NIQTEKKwlibmUJLkxBUk12OAorCXRzdAlyMTIsI0FSTVY3X05FT04KKwlibmUJLkxORU9OCisjZW5kaWYKIAlzdG1kYglzcCEse3I0LXIxMixscn0KIAlhZGQJJGxlbiwkaW5wLCRsZW4sbHNsIzYJQCAkbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQgb2YgJGlucAogCWxkbWlhCSRjdHgseyRhLCRiLCRjLCRkLCRlfQpAQCAtMjMzLDE2ICsyNTcsNDIyIEBAICRjb2RlLj08PF9fXzsKIAltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CiAJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKICNlbmRpZgotLmFsaWduCTIKKy5zaXplCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorCisuYWxpZ24JNQogLkxLXzAwXzE5Ogkud29yZAkweDVhODI3OTk5CiAuTEtfMjBfMzk6CS53b3JkCTB4NmVkOWViYTEKIC5MS180MF81OToJLndvcmQJMHg4ZjFiYmNkYwogLkxLXzYwXzc5Ogkud29yZAkweGNhNjJjMWQ2Ci0uc2l6ZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGExX2Jsb2NrX2RhdGFfb3JkZXIKLS5hc2NpegkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgotLmFsaWduCTIKKy5MT1BFTlNTTF9hcm1jYXA6Cisud29yZAlPUEVOU1NMX2FybWNhcF9QLXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorLmFzY2l6CSJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgQVJNdjQvTkVPTi9BUk12OCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5hbGlnbgk1CitfX18KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBORU9OIHN0dWZmCisjCit7e3sKK215IEBWPSgkYSwkYiwkYywkZCwkZSk7CitteSAoJEtfWFhfWFgsJEtpLCR0MCwkdDEsJFhmZXIsJHNhdmVkX3NwKT1tYXAoInIkXyIsKDguLjEyLDE0KSk7CitteSAkWGk9NDsKK215IEBYPW1hcCgicSRfIiwoOC4uMTEsMC4uMykpOworbXkgQFR4PSgicTEyIiwicTEzIik7CitteSAoJEssJHplcm8pPSgicTE0IiwicTE1Iik7CitteSAkaj0wOworCitzdWIgQVVUT0xPQUQoKSAgICAgICAgICAjIHRodW5rIFtzaW1wbGlmaWVkXSB4ODYtc3R5bGUgcGVybGFzbQoreyBteSAkb3Bjb2RlID0gJEFVVE9MT0FEOyAkb3Bjb2RlID1+IHMvLio6Oi8vOyAkb3Bjb2RlID1+IHMvXy9cLi87CisgIG15ICRhcmcgPSBwb3A7CisgICAgJGFyZyA9ICIjJGFyZyIgaWYgKCRhcmcqMSBlcSAkYXJnKTsKKyAgICAkY29kZSAuPSAiXHQkb3Bjb2RlXHQiLmpvaW4oJywnLEBfLCRhcmcpLiJcbiI7Cit9CisKK3N1YiBib2R5XzAwXzE5ICgpIHsKKwkoCisJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4JCSMgJyRjb2RlLj0iQCAkalxuIjsnLgorCScmYmljCSgkdDAsJGQsJGIpJywKKwknJmFkZAkoJGUsJGUsJEtpKScsCQkjIGUrPVhbaV0rSworCScmYW5kCSgkdDEsJGMsJGIpJywKKwknJmxkcgkoJEtpLHNwcmludGYgIltzcCwjJWRdIiw0KigoJGorMSkmMTUpKScsCisJJyZhZGQJKCRlLCRlLCRhLCJyb3IjMjciKScsCSMgZSs9Uk9SKEEsMjcpCisJJyZlb3IJKCR0MSwkdDEsJHQwKScsCQkjIEZfMDBfMTkKKwknJm1vdgkoJGIsJGIsInJvciMyIiknLAkjIGI9Uk9SKGIsMikKKwknJmFkZAkoJGUsJGUsJHQxKTsnLgkJIyBlKz1GXzAwXzE5CisJJyRqKys7CXVuc2hpZnQoQFYscG9wKEBWKSk7JworCSkKK30KK3N1YiBib2R5XzIwXzM5ICgpIHsKKwkoCisJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4JCSMgJyRjb2RlLj0iQCAkalxuIjsnLgorCScmZW9yCSgkdDAsJGIsJGQpJywKKwknJmFkZAkoJGUsJGUsJEtpKScsCQkjIGUrPVhbaV0rSworCScmbGRyCSgkS2ksc3ByaW50ZiAiW3NwLCMlZF0iLDQqKCgkaisxKSYxNSkpIGlmICgkajw3OSknLAorCScmZW9yCSgkdDEsJHQwLCRjKScsCQkjIEZfMjBfMzkKKwknJmFkZAkoJGUsJGUsJGEsInJvciMyNyIpJywJIyBlKz1ST1IoQSwyNykKKwknJm1vdgkoJGIsJGIsInJvciMyIiknLAkjIGI9Uk9SKGIsMikKKwknJmFkZAkoJGUsJGUsJHQxKTsnLgkJIyBlKz1GXzIwXzM5CisJJyRqKys7CXVuc2hpZnQoQFYscG9wKEBWKSk7JworCSkKK30KK3N1YiBib2R5XzQwXzU5ICgpIHsKKwkoCisJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4JCSMgJyRjb2RlLj0iQCAkalxuIjsnLgorCScmYWRkCSgkZSwkZSwkS2kpJywJCSMgZSs9WFtpXStLCisJJyZhbmQJKCR0MCwkYywkZCknLAorCScmbGRyCSgkS2ksc3ByaW50ZiAiW3NwLCMlZF0iLDQqKCgkaisxKSYxNSkpJywKKwknJmFkZAkoJGUsJGUsJGEsInJvciMyNyIpJywJIyBlKz1ST1IoQSwyNykKKwknJmVvcgkoJHQxLCRjLCRkKScsCisJJyZhZGQJKCRlLCRlLCR0MCknLAorCScmYW5kCSgkdDEsJHQxLCRiKScsCisJJyZtb3YJKCRiLCRiLCJyb3IjMiIpJywJIyBiPVJPUihiLDIpCisJJyZhZGQJKCRlLCRlLCR0MSk7Jy4JCSMgZSs9Rl80MF81OQorCSckaisrOwl1bnNoaWZ0KEBWLHBvcChAVikpOycKKwkpCit9CisKK3N1YiBYdXBkYXRlXzE2XzMxICgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSZ2ZXh0XzgJCShAWFswXSxAWFstNCY3XSxAWFstMyY3XSw4KTsJIyBjb21wb3NlICJYWy0xNF0iIGluICJYWzBdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZhZGRfaTMyCShAVHhbMV0sQFhbLTEmN10sJEspOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZsZDFfMzIJKCJ7JEtcW119IiwiWyRLX1hYX1hYLDozMl0hIikJaWYgKCRYaSU1PT0wKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdmV4dF84CQkoQFR4WzBdLEBYWy0xJjddLCR6ZXJvLDQpOwkjICJYWy0zXSIsIDMgd29yZHMKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdmVvcgkJKEBYWzBdLEBYWzBdLEBYWy00JjddKTsJCSMgIlhbMF0iXj0iWFstMTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2ZW9yCQkoQFR4WzBdLEBUeFswXSxAWFstMiY3XSk7CSMgIlhbLTNdIl4iWFstOF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZlb3IJCShAVHhbMF0sQFR4WzBdLEBYWzBdKTsJCSMgIlhbMF0iXj0iWFstM10iXiJYWy04XQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZzdDFfMzIJKCJ7QFR4WzFdfSIsIlskWGZlciw6MTI4XSEiKTsJIyBYW10rSyB4ZmVyCisJICAmc3ViCQkoJFhmZXIsJFhmZXIsNjQpCQlpZiAoJFhpJTQ9PTApOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2ZXh0XzgJCShAVHhbMV0sJHplcm8sQFR4WzBdLDQpOwkjICJYWzBdIjw8OTYsIGV4dHJhY3Qgb25lIGR3b3JkCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZhZGRfaTMyCShAWFswXSxAVHhbMF0sQFR4WzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnNyaV8zMgkoQFhbMF0sQFR4WzBdLDMxKTsJCSMgIlhbMF0iPDw8PTEKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnNocl91MzIJKEBUeFswXSxAVHhbMV0sMzApOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2c2hsX3UzMgkoQFR4WzFdLEBUeFsxXSwyKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdmVvcgkJKEBYWzBdLEBYWzBdLEBUeFswXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZlb3IJCShAWFswXSxAWFswXSxAVHhbMV0pOwkJIyAiWFswXSJePSgiWFswXSI+Pjk2KTw8PDIKKworCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucyBbaWYgYW55XQorCisgICRYaSsrOwlwdXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCit9CisKK3N1YiBYdXBkYXRlXzMyXzc5ICgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSZ2ZXh0XzgJCShAVHhbMF0sQFhbLTImN10sQFhbLTEmN10sOCk7CSMgY29tcG9zZSAiWFstNl0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZlb3IJCShAWFswXSxAWFswXSxAWFstNCY3XSk7CQkjICJYWzBdIj0iWFstMzJdIl4iWFstMTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2ZW9yCQkoQFhbMF0sQFhbMF0sQFhbLTcmN10pOwkJIyAiWFswXSJePSJYWy0yOF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdmFkZF9pMzIJKEBUeFsxXSxAWFstMSY3XSwkSyk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdmxkMV8zMgkoInskS1xbXX0iLCJbJEtfWFhfWFgsOjMyXSEiKQlpZiAoJFhpJTU9PTApOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2ZW9yCQkoQFR4WzBdLEBUeFswXSxAWFswXSk7CQkjICJYWy02XSJePSJYWzBdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2c2hyX3UzMgkoQFhbMF0sQFR4WzBdLDMwKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2c3QxXzMyCSgie0BUeFsxXX0iLCJbJFhmZXIsOjEyOF0hIik7CSMgWFtdK0sgeGZlcgorCSAgJnN1YgkJKCRYZmVyLCRYZmVyLDY0KQkJaWYgKCRYaSU0PT0wKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnNsaV8zMgkoQFhbMF0sQFR4WzBdLDIpOwkJIyAiWFswXSI9IlhbLTZdIjw8PDIKKworCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucyBbaWYgYW55XQorCisgICRYaSsrOwlwdXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCit9CisKK3N1YiBYdXBsYXN0XzgwICgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSZ2YWRkX2kzMgkoQFR4WzFdLEBYWy0xJjddLCRLKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnN0MV8zMgkoIntAVHhbMV19IiwiWyRYZmVyLDoxMjhdISIpOworCSZzdWIJCSgkWGZlciwkWGZlciw2NCk7CisKKwkmdGVxCQkoJGlucCwkbGVuKTsKKwkmc3ViCQkoJEtfWFhfWFgsJEtfWFhfWFgsMTYpOwkjIHJld2luZCAkS19YWF9YWAorCSZzdWJlcQkJKCRpbnAsJGlucCw2NCk7CQkjIHJlbG9hZCBsYXN0IGJsb2NrIHRvIGF2b2lkIFNFR1YKKwkmdmxkMV84CQkoIntAWFstNCY3XS1AWFstMyY3XX0iLCJbJGlucF0hIik7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZsZDFfOAkJKCJ7QFhbLTImN10tQFhbLTEmN119IiwiWyRpbnBdISIpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2bGQxXzMyCSgieyRLXFtdfSIsIlskS19YWF9YWCw6MzJdISIpOwkjIGxvYWQgS18wMF8xOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2cmV2MzJfOAkoQFhbLTQmN10sQFhbLTQmN10pOworCisJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JCSMgcmVtYWluaW5nIGluc3RydWN0aW9ucworCisgICAkWGk9MDsKK30KKworc3ViIFhsb29wKCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJJnZyZXYzMl84CShAWFsoJFhpLTMpJjddLEBYWygkWGktMykmN10pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2YWRkX2kzMgkoQFhbJFhpJjddLEBYWygkWGktNCkmN10sJEspOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2c3QxXzMyCSgie0BYWyRYaSY3XX0iLCJbJFhmZXIsOjEyOF0hIik7IyBYW10rSyB4ZmVyIHRvIElBTFUKKworCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CisKKyAgJFhpKys7Cit9CisKKyRjb2RlLj08PF9fXzsKKyNpZiBfX0FSTV9BUkNIX18+PTcKKy5mcHUJbmVvbgorCisudHlwZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXJfbmVvbiwlZnVuY3Rpb24KKy5hbGlnbgk0CitzaGExX2Jsb2NrX2RhdGFfb3JkZXJfbmVvbjoKKy5MTkVPTjoKKwlzdG1kYglzcCEse3I0LXIxMixscn0KKwlhZGQJJGxlbiwkaW5wLCRsZW4sbHNsIzYJQCAkbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQgb2YgJGlucAorCUAgZG1iCQkJCUAgZXJyYXRhICM0NTEwMzQgb24gZWFybHkgQ29ydGV4IEE4CisJQCB2c3RtZGIJc3AhLHtkOC1kMTV9CUAgQUJJIHNwZWNpZmljYXRpb24gc2F5cyBzbworCW1vdgkkc2F2ZWRfc3Asc3AKKwlzdWIJc3Asc3AsIzY0CQlAIGFsbG9jYQorCWFkcgkkS19YWF9YWCwuTEtfMDBfMTkKKwliaWMJc3Asc3AsIzE1CQlAIGFsaWduIGZvciAxMjgtYml0IHN0b3JlcworCisJbGRtaWEJJGN0eCx7JGEsJGIsJGMsJGQsJGV9CUAgbG9hZCBjb250ZXh0CisJbW92CSRYZmVyLHNwCisKKwl2bGQxLjgJCXtAWFstNCY3XS1AWFstMyY3XX0sWyRpbnBdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisJdmVvcgkJJHplcm8sJHplcm8sJHplcm8KKwl2bGQxLjgJCXtAWFstMiY3XS1AWFstMSY3XX0sWyRpbnBdIQorCXZsZDEuMzIJCXske0t9XFtdfSxbJEtfWFhfWFgsOjMyXSEJQCBsb2FkIEtfMDBfMTkKKwl2cmV2MzIuOAlAWFstNCY3XSxAWFstNCY3XQkJQCB5ZXMsIGV2ZW4gb24KKwl2cmV2MzIuOAlAWFstMyY3XSxAWFstMyY3XQkJQCBiaWctZW5kaWFuLi4uCisJdnJldjMyLjgJQFhbLTImN10sQFhbLTImN10KKwl2YWRkLmkzMglAWFswXSxAWFstNCY3XSwkSworCXZyZXYzMi44CUBYWy0xJjddLEBYWy0xJjddCisJdmFkZC5pMzIJQFhbMV0sQFhbLTMmN10sJEsKKwl2c3QxLjMyCQl7QFhbMF19LFskWGZlciw6MTI4XSEKKwl2YWRkLmkzMglAWFsyXSxAWFstMiY3XSwkSworCXZzdDEuMzIJCXtAWFsxXX0sWyRYZmVyLDoxMjhdIQorCXZzdDEuMzIJCXtAWFsyXX0sWyRYZmVyLDoxMjhdIQorCWxkcgkJJEtpLFtzcF0JCQlAIGJpZyBSQVcgc3RhbGwKKworLkxvb3BfbmVvbjoKK19fXworCSZYdXBkYXRlXzE2XzMxKFwmYm9keV8wMF8xOSk7CisJJlh1cGRhdGVfMTZfMzEoXCZib2R5XzAwXzE5KTsKKwkmWHVwZGF0ZV8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlXzE2XzMxKFwmYm9keV8wMF8xOSk7CisJJlh1cGRhdGVfMzJfNzkoXCZib2R5XzAwXzE5KTsKKwkmWHVwZGF0ZV8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlXzMyXzc5KFwmYm9keV8yMF8zOSk7CisJJlh1cGRhdGVfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwZGF0ZV8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlXzMyXzc5KFwmYm9keV8yMF8zOSk7CisJJlh1cGRhdGVfMzJfNzkoXCZib2R5XzQwXzU5KTsKKwkmWHVwZGF0ZV8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlXzMyXzc5KFwmYm9keV80MF81OSk7CisJJlh1cGRhdGVfMzJfNzkoXCZib2R5XzQwXzU5KTsKKwkmWHVwZGF0ZV8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlXzMyXzc5KFwmYm9keV8yMF8zOSk7CisJJlh1cGxhc3RfODAoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3AoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3AoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3AoXCZib2R5XzIwXzM5KTsKKyRjb2RlLj08PF9fXzsKKwlsZG1pYQkkY3R4LHskS2ksJHQwLCR0MSwkWGZlcn0JQCBhY2N1bXVsYXRlIGNvbnRleHQKKwlhZGQJJGEsJGEsJEtpCisJbGRyCSRLaSxbJGN0eCwjMTZdCisJYWRkCSRiLCRiLCR0MAorCWFkZAkkYywkYywkdDEKKwlhZGQJJGQsJGQsJFhmZXIKKwltb3ZlcQlzcCwkc2F2ZWRfc3AKKwlhZGQJJGUsJGUsJEtpCisJbGRybmUJJEtpLFtzcF0KKwlzdG1pYQkkY3R4LHskYSwkYiwkYywkZCwkZX0KKwlhZGRuZQkkWGZlcixzcCwjMyoxNgorCWJuZQkuTG9vcF9uZW9uCisKKwlAIHZsZG1pYQlzcCEse2Q4LWQxNX0KKwlsZG1pYQlzcCEse3I0LXIxMixwY30KKy5zaXplCXNoYTFfYmxvY2tfZGF0YV9vcmRlcl9uZW9uLC4tc2hhMV9ibG9ja19kYXRhX29yZGVyX25lb24KKyNlbmRpZgorX19fCit9fX0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBUk12OCBzdHVmZgorIwore3t7CitteSAoJEFCQ0QsJEUsJEUwLCRFMSk9bWFwKCJxJF8iLCgwLi4zKSk7CitteSBATVNHPW1hcCgicSRfIiwoNC4uNykpOworbXkgQEt4eD1tYXAoInEkXyIsKDguLjExKSk7CitteSAoJFcwLCRXMSwkQUJDRF9TQVZFKT1tYXAoInEkXyIsKDEyLi4xNCkpOworCiskY29kZS49PDxfX187CisjaWYgX19BUk1fQVJDSF9fPj03CisudHlwZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXJtdjgsJWZ1bmN0aW9uCisuYWxpZ24JNQorc2hhMV9ibG9ja19kYXRhX29yZGVyX2FybXY4OgorLkxBUk12ODoKKwl2c3RtZGIJc3AhLHtkOC1kMTV9CQlAIEFCSSBzcGVjaWZpY2F0aW9uIHNheXMgc28KKworCXZlb3IJJEUsJEUsJEUKKwlhZHIJcjMsLkxLXzAwXzE5CisJdmxkMS4zMgl7JEFCQ0R9LFskY3R4XSEKKwl2bGQxLjMyCXskRVxbMF19LFskY3R4XQorCXN1YgkkY3R4LCRjdHgsIzE2CisJdmxkMS4zMgl7QEt4eFswXVxbXX0sW3IzLDozMl0hCisJdmxkMS4zMgl7QEt4eFsxXVxbXX0sW3IzLDozMl0hCisJdmxkMS4zMgl7QEt4eFsyXVxbXX0sW3IzLDozMl0hCisJdmxkMS4zMgl7QEt4eFszXVxbXX0sW3IzLDozMl0KKworLkxvb3Bfdjg6CisJdmxkMS44CQl7QE1TR1swXS1ATVNHWzFdfSxbJGlucF0hCisJdmxkMS44CQl7QE1TR1syXS1ATVNHWzNdfSxbJGlucF0hCisJdnJldjMyLjgJQE1TR1swXSxATVNHWzBdCisJdnJldjMyLjgJQE1TR1sxXSxATVNHWzFdCisKKwl2YWRkLmkzMgkkVzAsQEt4eFswXSxATVNHWzBdCisJdnJldjMyLjgJQE1TR1syXSxATVNHWzJdCisJdm1vdgkJJEFCQ0RfU0FWRSwkQUJDRAlAIG9mZmxvYWQKKwlzdWJzCQkkbGVuLCRsZW4sIzEKKworCXZhZGQuaTMyCSRXMSxAS3h4WzBdLEBNU0dbMV0KKwl2cmV2MzIuOAlATVNHWzNdLEBNU0dbM10KKwlzaGExaAkJJEUxLCRBQkNECQlAIDAKKwlzaGExYwkJJEFCQ0QsJEUsJFcwCisJdmFkZC5pMzIJJFcwLEBLeHhbJGpdLEBNU0dbMl0KKwlzaGExc3UwCQlATVNHWzBdLEBNU0dbMV0sQE1TR1syXQorX19fCitmb3IgKCRqPTAsJGk9MTskaTwyMC0zOyRpKyspIHsKK215ICRmPSgiYyIsInAiLCJtIiwicCIpWyRpLzVdOworJGNvZGUuPTw8X19fOworCXNoYTFoCQkkRTAsJEFCQ0QJCUAgJGkKKwlzaGExJGYJCSRBQkNELCRFMSwkVzEKKwl2YWRkLmkzMgkkVzEsQEt4eFskal0sQE1TR1szXQorCXNoYTFzdTEJCUBNU0dbMF0sQE1TR1szXQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPDIwLTQpOworCXNoYTFzdTAJCUBNU0dbMV0sQE1TR1syXSxATVNHWzNdCiBfX18KKwkoJEUwLCRFMSk9KCRFMSwkRTApOwkoJFcwLCRXMSk9KCRXMSwkVzApOworCXB1c2goQE1TRyxzaGlmdChATVNHKSk7CSRqKysgaWYgKCgoJGkrMyklNSk9PTApOworfQorJGNvZGUuPTw8X19fOworCXNoYTFoCQkkRTAsJEFCQ0QJCUAgJGkKKwlzaGExcAkJJEFCQ0QsJEUxLCRXMQorCXZhZGQuaTMyCSRXMSxAS3h4WyRqXSxATVNHWzNdCisKKwlzaGExaAkJJEUxLCRBQkNECQlAIDE4CisJc2hhMXAJCSRBQkNELCRFMCwkVzAKKworCXNoYTFoCQkkRTAsJEFCQ0QJCUAgMTkKKwlzaGExcAkJJEFCQ0QsJEUxLCRXMQorCisJdmFkZC5pMzIJJEUsJEUsJEUwCisJdmFkZC5pMzIJJEFCQ0QsJEFCQ0QsJEFCQ0RfU0FWRQorCWJuZQkJLkxvb3BfdjgKKworCXZzdDEuMzIJCXskQUJDRH0sWyRjdHhdIQorCXZzdDEuMzIJCXskRVxbMF19LFskY3R4XQorCisJdmxkbWlhCXNwISx7ZDgtZDE1fQorCXJldAkJCQkJQCBieCBscgorLnNpemUJc2hhMV9ibG9ja19kYXRhX29yZGVyX2FybXY4LC4tc2hhMV9ibG9ja19kYXRhX29yZGVyX2FybXY4CisjZW5kaWYKK19fXworfX19CiskY29kZS49PDxfX187CisuY29tbQlPUEVOU1NMX2FybWNhcF9QLDQsNAorX19fCisKK3sgICBteSAgJW9wY29kZSA9ICgKKwkic2hhMWMiCQk9PiAweGYyMDAwYzQwLAkic2hhMXAiCQk9PiAweGYyMTAwYzQwLAorCSJzaGExbSIJCT0+IDB4ZjIyMDBjNDAsCSJzaGExc3UwIgk9PiAweGYyMzAwYzQwLAorCSJzaGExaCIJCT0+IDB4ZjNiOTAyYzAsCSJzaGExc3UxIgk9PiAweGYzYmEwMzgwCSk7CisKKyAgICBzdWIgdW5zaGExIHsKKwlteSAoJG1uZW1vbmljLCRhcmcpPUBfOworCisJaWYgKCRhcmcgPX4gbS9xKFswLTldKykoPzosXHMqcShbMC05XSspKT8sXHMqcShbMC05XSspL28pIHsKKwkgICAgbXkgJHdvcmQgPSAkb3Bjb2RleyRtbmVtb25pY318KCgkMSY3KTw8MTMpfCgoJDEmOCk8PDE5KQorCQkJCQkgfCgoJDImNyk8PDE3KXwoKCQyJjgpPDw0KQorCQkJCQkgfCgoJDMmNyk8PDEpIHwoKCQzJjgpPDwyKTsKKwkgICAgIyBzaW5jZSBBUk12NyBpbnN0cnVjdGlvbnMgYXJlIGFsd2F5cyBlbmNvZGVkIGxpdHRsZS1lbmRpYW4uCisJICAgICMgY29ycmVjdCBzb2x1dGlvbiBpcyB0byB1c2UgLmluc3QgZGlyZWN0aXZlLCBidXQgb2xkZXIKKwkgICAgIyBhc3NlbWJsZXJzIGRvbid0IGltcGxlbWVudCBpdDotKAorCSAgICBzcHJpbnRmICIuYnl0ZVx0MHglMDJ4LDB4JTAyeCwweCUwMngsMHglMDJ4XHRAICVzICVzIiwKKwkJCSR3b3JkJjB4ZmYsKCR3b3JkPj44KSYweGZmLAorCQkJKCR3b3JkPj4xNikmMHhmZiwoJHdvcmQ+PjI0KSYweGZmLAorCQkJJG1uZW1vbmljLCRhcmc7CisJfQorICAgIH0KK30KKworZm9yZWFjaCAoc3BsaXQoJC8sJGNvZGUpKSB7CisJcy97cShbMC05XSspXFtcXX0vc3ByaW50ZiAie2QlZFtdLGQlZFtdfSIsMiokMSwyKiQxKzEvZW8Jb3IKKwlzL3txKFswLTldKylcWzBcXX0vc3ByaW50ZiAie2QlZFswXX0iLDIqJDEvZW87CisKKwlzL1xiKHNoYTFcdyspXHMrKHEuKikvdW5zaGExKCQxLCQyKS9nZW87CisKKwlzL1xicmV0XGIvYngJbHIvbwkJb3IKKwlzL1xiYnhccytsclxiLy53b3JkXHQweGUxMmZmZjFlL287CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0CisKKwlwcmludCAkXywkLzsKK30KIAotJGNvZGUgPX4gcy9cYmJ4XHMrbHJcYi8ud29yZFx0MHhlMTJmZmYxZS9nbTsJIyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCAtbWFyY2g9YXJtdjQKLXByaW50ICRjb2RlOwogY2xvc2UgU1RET1VUOyAjIGVuZm9yY2UgZmx1c2gKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjgucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGExLWFybXY4LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZjU1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGExLWFybXY4LnBsCkBAIC0wLDAgKzEsMzMzIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTSEExIGZvciBBUk12OC4KKyMKKyMgUGVyZm9ybWFuY2UgaW4gY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZSBhbmQgaW1wcm92ZW1lbnQgY29lZmZpY2llbnQKKyMgb3ZlciBjb2RlIGdlbmVyYXRlZCB3aXRoICJkZWZhdWx0IiBjb21waWxlcjoKKyMKKyMJCWhhcmR3YXJlLWFzc2lzdGVkCXNvZnR3YXJlKCopCisjIEFwcGxlIEE3CTIuMzEJCQk0LjEzICgrMTQlKQorIyBDb3J0ZXgtQTV4CW4vYQkJCW4vYQorIworIyAoKikJU29mdHdhcmUgcmVzdWx0cyBhcmUgcHJlc2VudGVkIG1vc3RseSBmb3IgcmVmZXJlbmNlIHB1cnBvc2VzLgorCiskZmxhdm91ciA9IHNoaWZ0Oworb3BlbiBTVERPVVQsIj4iLnNoaWZ0OworCisoJGN0eCwkaW5wLCRudW0pPSgieDAiLCJ4MSIsIngyIik7CitAWHc9bWFwKCJ3JF8iLCgzLi4xNywxOSkpOworQFh4PW1hcCgieCRfIiwoMy4uMTcsMTkpKTsKK0BWPSgkQSwkQiwkQywkRCwkRSk9bWFwKCJ3JF8iLCgyMC4uMjQpKTsKKygkdDAsJHQxLCR0MiwkSyk9bWFwKCJ3JF8iLCgyNS4uMjgpKTsKKworCitzdWIgQk9EWV8wMF8xOSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9KCRpKzIpJjE1OworCiskY29kZS49PDxfX18gaWYgKCRpPDE1ICYmICEoJGkmMSkpOworCWxzcglAWHhbJGkrMV0sQFh4WyRpXSwjMzIKK19fXworJGNvZGUuPTw8X19fIGlmICgkaTwxNCAmJiAhKCRpJjEpKTsKKwlsZHIJQFh4WyRpKzJdLFskaW5wLCNgKCRpKzIpKjQtNjRgXQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPDE0ICYmICgkaSYxKSk7CisjaWZkZWYJX19BUk1FQl9fCisJcm9yCUBYeFskaSsxXSxAWHhbJGkrMV0sIzMyCisjZWxzZQorCXJldjMyCUBYeFskaSsxXSxAWHhbJGkrMV0KKyNlbmRpZgorX19fCiskY29kZS49PDxfX18gaWYgKCRpPDE0KTsKKwliaWMJJHQwLCRkLCRiCisJYW5kCSR0MSwkYywkYgorCXJvcgkkdDIsJGEsIzI3CisJYWRkCSRkLCRkLCRLCQkvLyBmdXR1cmUgZSs9SworCW9ycgkkdDAsJHQwLCR0MQorCWFkZAkkZSwkZSwkdDIJCS8vIGUrPXJvdChhLDUpCisJcm9yCSRiLCRiLCMyCisJYWRkCSRkLCRkLEBYd1soJGkrMSkmMTVdCS8vIGZ1dHVyZSBlKz1YW2ldCisJYWRkCSRlLCRlLCR0MAkJLy8gZSs9RihiLGMsZCkKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09MTkpOworCW1vdnoJJEssIzB4ZWJhMQorCW1vdmsJJEssIzB4NmVkOSxsc2wjMTYKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT49MTQpOworCSBlb3IJQFh3WyRqXSxAWHdbJGpdLEBYd1soJGorMikmMTVdCisJYmljCSR0MCwkZCwkYgorCWFuZAkkdDEsJGMsJGIKKwlyb3IJJHQyLCRhLCMyNworCSBlb3IJQFh3WyRqXSxAWHdbJGpdLEBYd1soJGorOCkmMTVdCisJYWRkCSRkLCRkLCRLCQkvLyBmdXR1cmUgZSs9SworCW9ycgkkdDAsJHQwLCR0MQorCWFkZAkkZSwkZSwkdDIJCS8vIGUrPXJvdChhLDUpCisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3WygkaisxMykmMTVdCisJcm9yCSRiLCRiLCMyCisJYWRkCSRkLCRkLEBYd1soJGkrMSkmMTVdCS8vIGZ1dHVyZSBlKz1YW2ldCisJYWRkCSRlLCRlLCR0MAkJLy8gZSs9RihiLGMsZCkKKwkgcm9yCUBYd1skal0sQFh3WyRqXSwjMzEKK19fXworfQorCitzdWIgQk9EWV80MF81OSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9KCRpKzIpJjE1OworCiskY29kZS49PDxfX18gaWYgKCRpPT01OSk7CisJbW92egkkSywjMHhjMWQ2CisJbW92awkkSywjMHhjYTYyLGxzbCMxNgorX19fCiskY29kZS49PDxfX187CisJb3JyCSR0MCwkYiwkYworCWFuZAkkdDEsJGIsJGMKKwkgZW9yCUBYd1skal0sQFh3WyRqXSxAWHdbKCRqKzIpJjE1XQorCXJvcgkkdDIsJGEsIzI3CisJYW5kCSR0MCwkdDAsJGQKKwlhZGQJJGQsJGQsJEsJCS8vIGZ1dHVyZSBlKz1LCisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3Wygkais4KSYxNV0KKwlhZGQJJGUsJGUsJHQyCQkvLyBlKz1yb3QoYSw1KQorCW9ycgkkdDAsJHQwLCR0MQorCXJvcgkkYiwkYiwjMgorCSBlb3IJQFh3WyRqXSxAWHdbJGpdLEBYd1soJGorMTMpJjE1XQorCWFkZAkkZCwkZCxAWHdbKCRpKzEpJjE1XQkvLyBmdXR1cmUgZSs9WFtpXQorCWFkZAkkZSwkZSwkdDAJCS8vIGUrPUYoYixjLGQpCisJIHJvcglAWHdbJGpdLEBYd1skal0sIzMxCitfX18KK30KKworc3ViIEJPRFlfMjBfMzkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICRqPSgkaSsyKSYxNTsKKworJGNvZGUuPTw8X19fIGlmICgkaT09MzkpOworCW1vdnoJJEssIzB4YmNkYworCW1vdmsJJEssIzB4OGYxYixsc2wjMTYKK19fXworJGNvZGUuPTw8X19fIGlmICgkaTw3OCk7CisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3WygkaisyKSYxNV0KKwllb3IJJHQwLCRkLCRiCisJcm9yCSR0MiwkYSwjMjcKKwlhZGQJJGQsJGQsJEsJCS8vIGZ1dHVyZSBlKz1LCisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3Wygkais4KSYxNV0KKwllb3IJJHQwLCR0MCwkYworCWFkZAkkZSwkZSwkdDIJCS8vIGUrPXJvdChhLDUpCisJcm9yCSRiLCRiLCMyCisJIGVvcglAWHdbJGpdLEBYd1skal0sQFh3WygkaisxMykmMTVdCisJYWRkCSRkLCRkLEBYd1soJGkrMSkmMTVdCS8vIGZ1dHVyZSBlKz1YW2ldCisJYWRkCSRlLCRlLCR0MAkJLy8gZSs9RihiLGMsZCkKKwkgcm9yCUBYd1skal0sQFh3WyRqXSwjMzEKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09NzgpOworCWxkcAlAWHdbMV0sQFh3WzJdLFskY3R4XQorCWVvcgkkdDAsJGQsJGIKKwlyb3IJJHQyLCRhLCMyNworCWFkZAkkZCwkZCwkSwkJLy8gZnV0dXJlIGUrPUsKKwllb3IJJHQwLCR0MCwkYworCWFkZAkkZSwkZSwkdDIJCS8vIGUrPXJvdChhLDUpCisJcm9yCSRiLCRiLCMyCisJYWRkCSRkLCRkLEBYd1soJGkrMSkmMTVdCS8vIGZ1dHVyZSBlKz1YW2ldCisJYWRkCSRlLCRlLCR0MAkJLy8gZSs9RihiLGMsZCkKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09NzkpOworCWxkcAlAWHdbM10sQFh3WzRdLFskY3R4LCM4XQorCWVvcgkkdDAsJGQsJGIKKwlyb3IJJHQyLCRhLCMyNworCWVvcgkkdDAsJHQwLCRjCisJYWRkCSRlLCRlLCR0MgkJLy8gZSs9cm90KGEsNSkKKwlyb3IJJGIsJGIsIzIKKwlsZHIJQFh3WzVdLFskY3R4LCMxNl0KKwlhZGQJJGUsJGUsJHQwCQkvLyBlKz1GKGIsYyxkKQorX19fCit9CisKKyRjb2RlLj08PF9fXzsKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgorCisudGV4dAorCisuZ2xvYmwJc2hhMV9ibG9ja19kYXRhX29yZGVyCisudHlwZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsJWZ1bmN0aW9uCisuYWxpZ24JNgorc2hhMV9ibG9ja19kYXRhX29yZGVyOgorCWxkcgl4MTYsLkxPUEVOU1NMX2FybWNhcF9QCisJYWRyCXgxNywuTE9QRU5TU0xfYXJtY2FwX1AKKwlhZGQJeDE2LHgxNix4MTcKKwlsZHIJdzE2LFt4MTZdCisJdHN0CXcxNiwjQVJNVjhfU0hBMQorCWIubmUJLkx2OF9lbnRyeQorCisJc3RwCXgyOSx4MzAsW3NwLCMtOTZdIQorCWFkZAl4Mjksc3AsIzAKKwlzdHAJeDE5LHgyMCxbc3AsIzE2XQorCXN0cAl4MjEseDIyLFtzcCwjMzJdCisJc3RwCXgyMyx4MjQsW3NwLCM0OF0KKwlzdHAJeDI1LHgyNixbc3AsIzY0XQorCXN0cAl4MjcseDI4LFtzcCwjODBdCisKKwlsZHAJJEEsJEIsWyRjdHhdCisJbGRwCSRDLCRELFskY3R4LCM4XQorCWxkcgkkRSxbJGN0eCwjMTZdCisKKy5Mb29wOgorCWxkcglAWHhbMF0sWyRpbnBdLCM2NAorCW1vdnoJJEssIzB4Nzk5OQorCXN1YgkkbnVtLCRudW0sIzEKKwltb3ZrCSRLLCMweDVhODIsbHNsIzE2CisjaWZkZWYJX19BUk1FQl9fCisJcm9yCSRYeFswXSxAWHhbMF0sIzMyCisjZWxzZQorCXJldjMyCUBYeFswXSxAWHhbMF0KKyNlbmRpZgorCWFkZAkkRSwkRSwkSwkJLy8gd2FybSBpdCB1cAorCWFkZAkkRSwkRSxAWHdbMF0KK19fXworZm9yKCRpPTA7JGk8MjA7JGkrKykJeyAmQk9EWV8wMF8xOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2Zvcig7JGk8NDA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2Zvcig7JGk8NjA7JGkrKykJeyAmQk9EWV80MF81OSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KK2Zvcig7JGk8ODA7JGkrKykJeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsKKwlhZGQJJEIsJEIsQFh3WzJdCisJYWRkCSRDLCRDLEBYd1szXQorCWFkZAkkQSwkQSxAWHdbMV0KKwlhZGQJJEQsJEQsQFh3WzRdCisJYWRkCSRFLCRFLEBYd1s1XQorCXN0cAkkQSwkQixbJGN0eF0KKwlzdHAJJEMsJEQsWyRjdHgsIzhdCisJc3RyCSRFLFskY3R4LCMxNl0KKwljYm56CSRudW0sLkxvb3AKKworCWxkcAl4MTkseDIwLFtzcCwjMTZdCisJbGRwCXgyMSx4MjIsW3NwLCMzMl0KKwlsZHAJeDIzLHgyNCxbc3AsIzQ4XQorCWxkcAl4MjUseDI2LFtzcCwjNjRdCisJbGRwCXgyNyx4MjgsW3NwLCM4MF0KKwlsZHIJeDI5LFtzcF0sIzk2CisJcmV0Cisuc2l6ZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGExX2Jsb2NrX2RhdGFfb3JkZXIKK19fXwore3t7CitteSAoJEFCQ0QsJEUsJEUwLCRFMSk9bWFwKCJ2JF8uMTZiIiwoMC4uMykpOworbXkgQE1TRz1tYXAoInYkXy4xNmIiLCg0Li43KSk7CitteSBAS3h4PW1hcCgidiRfLjRzIiwoMTYuLjE5KSk7CitteSAoJFcwLCRXMSk9KCJ2MjAuNHMiLCJ2MjEuNHMiKTsKK215ICRBQkNEX1NBVkU9InYyMi4xNmIiOworCiskY29kZS49PDxfX187CisudHlwZQlzaGExX2Jsb2NrX2FybXY4LCVmdW5jdGlvbgorLmFsaWduCTYKK3NoYTFfYmxvY2tfYXJtdjg6CisuTHY4X2VudHJ5OgorCXN0cAl4MjkseDMwLFtzcCwjLTE2XSEKKwlhZGQJeDI5LHNwLCMwCisKKwlhZHIJeDQsLkxjb25zdAorCWVvcgkkRSwkRSwkRQorCWxkMS4zMgl7JEFCQ0R9LFskY3R4XSwjMTYKKwlsZDEuMzIJeyRFfVswXSxbJGN0eF0KKwlzdWIJJGN0eCwkY3R4LCMxNgorCWxkMS4zMgl7QEt4eFswXS1AS3h4WzNdfSxbeDRdCisKKy5Mb29wX2h3OgorCWxkMQl7QE1TR1swXS1ATVNHWzNdfSxbJGlucF0sIzY0CisJc3ViCSRudW0sJG51bSwjMQorCXJldjMyCUBNU0dbMF0sQE1TR1swXQorCXJldjMyCUBNU0dbMV0sQE1TR1sxXQorCisJYWRkLmkzMgkkVzAsQEt4eFswXSxATVNHWzBdCisJcmV2MzIJQE1TR1syXSxATVNHWzJdCisJb3JyCSRBQkNEX1NBVkUsJEFCQ0QsJEFCQ0QJLy8gb2ZmbG9hZAorCisJYWRkLmkzMgkkVzEsQEt4eFswXSxATVNHWzFdCisJcmV2MzIJQE1TR1szXSxATVNHWzNdCisJc2hhMWgJJEUxLCRBQkNECisJc2hhMWMJJEFCQ0QsJEUsJFcwCQkvLyAwCisJYWRkLmkzMgkkVzAsQEt4eFskal0sQE1TR1syXQorCXNoYTFzdTAJQE1TR1swXSxATVNHWzFdLEBNU0dbMl0KK19fXworZm9yICgkaj0wLCRpPTE7JGk8MjAtMzskaSsrKSB7CitteSAkZj0oImMiLCJwIiwibSIsInAiKVskaS81XTsKKyRjb2RlLj08PF9fXzsKKwlzaGExaAkkRTAsJEFCQ0QJCS8vICRpCisJc2hhMSRmCSRBQkNELCRFMSwkVzEKKwlhZGQuaTMyCSRXMSxAS3h4WyRqXSxATVNHWzNdCisJc2hhMXN1MQlATVNHWzBdLEBNU0dbM10KK19fXworJGNvZGUuPTw8X19fIGlmICgkaTwyMC00KTsKKwlzaGExc3UwCUBNU0dbMV0sQE1TR1syXSxATVNHWzNdCitfX18KKwkoJEUwLCRFMSk9KCRFMSwkRTApOwkJKCRXMCwkVzEpPSgkVzEsJFcwKTsKKwlwdXNoKEBNU0csc2hpZnQoQE1TRykpOwkJJGorKyBpZiAoKCgkaSszKSU1KT09MCk7Cit9CiskY29kZS49PDxfX187CisJc2hhMWgJJEUwLCRBQkNECQkvLyAkaQorCXNoYTFwCSRBQkNELCRFMSwkVzEKKwlhZGQuaTMyCSRXMSxAS3h4WyRqXSxATVNHWzNdCisKKwlzaGExaAkkRTEsJEFCQ0QJCS8vIDE4CisJc2hhMXAJJEFCQ0QsJEUwLCRXMAorCisJc2hhMWgJJEUwLCRBQkNECQkvLyAxOQorCXNoYTFwCSRBQkNELCRFMSwkVzEKKworCWFkZC5pMzIJJEUsJEUsJEUwCisJYWRkLmkzMgkkQUJDRCwkQUJDRCwkQUJDRF9TQVZFCisKKwljYm56CSRudW0sLkxvb3BfaHcKKworCXN0MS4zMgl7JEFCQ0R9LFskY3R4XSwjMTYKKwlzdDEuMzIJeyRFfVswXSxbJGN0eF0KKworCWxkcgl4MjksW3NwXSwjMTYKKwlyZXQKKy5zaXplCXNoYTFfYmxvY2tfYXJtdjgsLi1zaGExX2Jsb2NrX2FybXY4CisuYWxpZ24JNgorLkxjb25zdDoKKy5sb25nCTB4NWE4Mjc5OTksMHg1YTgyNzk5OSwweDVhODI3OTk5LDB4NWE4Mjc5OTkJLy9LXzAwXzE5CisubG9uZwkweDZlZDllYmExLDB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSwweDZlZDllYmExCS8vS18yMF8zOQorLmxvbmcJMHg4ZjFiYmNkYywweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFiYmNkYwkvL0tfNDBfNTkKKy5sb25nCTB4Y2E2MmMxZDYsMHhjYTYyYzFkNiwweGNhNjJjMWQ2LDB4Y2E2MmMxZDYJLy9LXzYwXzc5CisuTE9QRU5TU0xfYXJtY2FwX1A6CisucXVhZAlPUEVOU1NMX2FybWNhcF9QLS4KKy5hc2NpegkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTIKKy5jb21tCU9QRU5TU0xfYXJtY2FwX1AsNCw0CitfX18KK319fQorCit7ICAgbXkJJW9wY29kZSA9ICgKKwkic2hhMWMiCQk9PiAweDVlMDAwMDAwLAkic2hhMXAiCQk9PiAweDVlMDAxMDAwLAorCSJzaGExbSIJCT0+IDB4NWUwMDIwMDAsCSJzaGExc3UwIgk9PiAweDVlMDAzMDAwLAorCSJzaGExaCIJCT0+IDB4NWUyODA4MDAsCSJzaGExc3UxIgk9PiAweDVlMjgxODAwCSk7CisKKyAgICBzdWIgdW5zaGExIHsKKwlteSAoJG1uZW1vbmljLCRhcmcpPUBfOworCisJJGFyZyA9fiBtL1txdl0oWzAtOV0rKVteLF0qLFxzKltxdl0oWzAtOV0rKVteLF0qKD86LFxzKltxdl0oWzAtOV0rKSk/L28KKwkmJgorCXNwcmludGYgIi5pbnN0XHQweCUwOHhcdC8vJXMgJXMiLAorCQkJJG9wY29kZXskbW5lbW9uaWN9fCQxfCgkMjw8NSl8KCQzPDwxNiksCisJCQkkbW5lbW9uaWMsJGFyZzsKKyAgICB9Cit9CisKK2ZvcmVhY2goc3BsaXQoIlxuIiwkY29kZSkpIHsKKworCXMvXGAoW15cYF0qKVxgL2V2YWwoJDEpL2dlbzsKKworCXMvXGIoc2hhMVx3KylccysoW3F2XS4qKS91bnNoYTEoJDEsJDIpL2dlbzsKKworCXMvXC5cdz8zMlxiLy9vCQlhbmQgcy9cLjE2Yi9cLjRzL2dvOworCW0vKGxkfHN0KTFbXlxbXStcWzBcXS9vCWFuZCBzL1wuNHMvXC5zL2dvOworCisJcHJpbnQgJF8sIlxuIjsKK30KKworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMjU2LWFybXY0LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMjU2LWFybXY0LnBsCmluZGV4IDljODRlOGQuLjUwNWNhOGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni1hcm12NC5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGEyNTYtYXJtdjQucGwKQEAgLTEsNyArMSw3IEBACiAjIS91c3IvYmluL2VudiBwZXJsCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAogIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiAjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCiAjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgpAQCAtMjEsMTUgKzIxLDI3IEBACiAjIEZlYnJ1YXJ5IDIwMTEuCiAjCiAjIFByb2ZpbGVyLWFzc2lzdGVkIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gcmVzdWx0ZWQgaW4gMTYlCi0jIGltcHJvdmVtZW50IG9uIENvcnRleCBBOCBjb3JlIGFuZCB+MTcgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZS4KKyMgaW1wcm92ZW1lbnQgb24gQ29ydGV4IEE4IGNvcmUgYW5kIH4xNS40IGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUuCisKKyMgU2VwdGVtYmVyIDIwMTMuCisjCisjIEFkZCBORU9OIGltcGxlbWVudGF0aW9uLiBPbiBDb3J0ZXggQTggaXQgd2FzIG1lYXN1cmVkIHRvIHByb2Nlc3Mgb25lCisjIGJ5dGUgaW4gMTIuNSBjeWNsZXMgb3IgMjMlIGZhc3RlciB0aGFuIGludGVnZXItb25seSBjb2RlLiBTbmFwZHJhZ29uCisjIFM0IGRvZXMgaXQgaW4gMTIuNSBjeWNsZXMgdG9vLCBidXQgaXQncyA1MCUgZmFzdGVyIHRoYW4gaW50ZWdlci1vbmx5CisjIGNvZGUgKG1lYW5pbmcgdGhhdCBsYXR0ZXIgcGVyZm9ybXMgc3ViLW9wdGltYWxseSwgbm90aGluZyB3YXMgZG9uZQorIyBhYm91dCBpdCkuCisKKyMgTWF5IDIwMTQuCisjCisjIEFkZCBBUk12OCBjb2RlIHBhdGggcGVyZm9ybWluZyBhdCAyLjAgY3BiIG9uIEFwcGxlIEE3LgogCiB3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQogb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKIAogJGN0eD0icjAiOwkkdDA9InIwIjsKLSRpbnA9InIxIjsJJHQzPSJyMSI7CiskaW5wPSJyMSI7CSR0ND0icjEiOwogJGxlbj0icjIiOwkkdDE9InIyIjsKLSRUMT0icjMiOworJFQxPSJyMyI7CSR0Mz0icjMiOwogJEE9InI0IjsKICRCPSJyNSI7CiAkQz0icjYiOwpAQCAtNTIsNzEgKzY0LDg4IEBAIG15ICgkaSwkYSwkYiwkYywkZCwkZSwkZiwkZywkaCkgPSBAXzsKIAogJGNvZGUuPTw8X19fIGlmICgkaTwxNik7CiAjaWYgX19BUk1fQVJDSF9fPj03Ci0JbGRyCSRUMSxbJGlucF0sIzQKKwlAIGxkcgkkdDEsWyRpbnBdLCM0CQkJQCAkaQorIyBpZiAkaT09MTUKKwlzdHIJJGlucCxbc3AsIzE3KjRdCQkJQCBtYWtlIHJvb20gZm9yICR0NAorIyBlbmRpZgorCWVvcgkkdDAsJGUsJGUscm9yI2AkU2lnbWExWzFdLSRTaWdtYTFbMF1gCisJYWRkCSRhLCRhLCR0MgkJCUAgaCs9TWFqKGEsYixjKSBmcm9tIHRoZSBwYXN0CisJZW9yCSR0MCwkdDAsJGUscm9yI2AkU2lnbWExWzJdLSRTaWdtYTFbMF1gCUAgU2lnbWExKGUpCisJcmV2CSR0MSwkdDEKICNlbHNlCi0JbGRyYgkkVDEsWyRpbnAsIzNdCQkJQCAkaQorCUAgbGRyYgkkdDEsWyRpbnAsIzNdCQkJQCAkaQorCWFkZAkkYSwkYSwkdDIJCQlAIGgrPU1haihhLGIsYykgZnJvbSB0aGUgcGFzdAogCWxkcmIJJHQyLFskaW5wLCMyXQotCWxkcmIJJHQxLFskaW5wLCMxXQotCWxkcmIJJHQwLFskaW5wXSwjNAotCW9ycgkkVDEsJFQxLCR0Mixsc2wjOAotCW9ycgkkVDEsJFQxLCR0MSxsc2wjMTYKLQlvcnIJJFQxLCRUMSwkdDAsbHNsIzI0CisJbGRyYgkkdDAsWyRpbnAsIzFdCisJb3JyCSR0MSwkdDEsJHQyLGxzbCM4CisJbGRyYgkkdDIsWyRpbnBdLCM0CisJb3JyCSR0MSwkdDEsJHQwLGxzbCMxNgorIyBpZiAkaT09MTUKKwlzdHIJJGlucCxbc3AsIzE3KjRdCQkJQCBtYWtlIHJvb20gZm9yICR0NAorIyBlbmRpZgorCWVvcgkkdDAsJGUsJGUscm9yI2AkU2lnbWExWzFdLSRTaWdtYTFbMF1gCisJb3JyCSR0MSwkdDEsJHQyLGxzbCMyNAorCWVvcgkkdDAsJHQwLCRlLHJvciNgJFNpZ21hMVsyXS0kU2lnbWExWzBdYAlAIFNpZ21hMShlKQogI2VuZGlmCiBfX18KICRjb2RlLj08PF9fXzsKLQltb3YJJHQwLCRlLHJvciMkU2lnbWExWzBdCiAJbGRyCSR0MixbJEt0YmxdLCM0CQkJQCAqSzI1NisrCi0JZW9yCSR0MCwkdDAsJGUscm9yIyRTaWdtYTFbMV0KKwlhZGQJJGgsJGgsJHQxCQkJQCBoKz1YW2ldCisJc3RyCSR0MSxbc3AsI2AkaSUxNmAqNF0KIAllb3IJJHQxLCRmLCRnCi0jaWYgJGk+PTE2Ci0JYWRkCSRUMSwkVDEsJHQzCQkJQCBmcm9tIEJPRFlfMTZfeHgKLSNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKLQlyZXYJJFQxLCRUMQotI2VuZGlmCi0jaWYgJGk9PTE1Ci0Jc3RyCSRpbnAsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgJHQzCi0jZW5kaWYKLQllb3IJJHQwLCR0MCwkZSxyb3IjJFNpZ21hMVsyXQlAIFNpZ21hMShlKQorCWFkZAkkaCwkaCwkdDAscm9yIyRTaWdtYTFbMF0JQCBoKz1TaWdtYTEoZSkKIAlhbmQJJHQxLCR0MSwkZQotCXN0cgkkVDEsW3NwLCNgJGklMTZgKjRdCi0JYWRkCSRUMSwkVDEsJHQwCisJYWRkCSRoLCRoLCR0MgkJCUAgaCs9SzI1NltpXQogCWVvcgkkdDEsJHQxLCRnCQkJQCBDaChlLGYsZykKLQlhZGQJJFQxLCRUMSwkaAotCW1vdgkkaCwkYSxyb3IjJFNpZ21hMFswXQotCWFkZAkkVDEsJFQxLCR0MQotCWVvcgkkaCwkaCwkYSxyb3IjJFNpZ21hMFsxXQotCWFkZAkkVDEsJFQxLCR0MgotCWVvcgkkaCwkaCwkYSxyb3IjJFNpZ21hMFsyXQkJQCBTaWdtYTAoYSkKLSNpZiAkaT49MTUKLQlsZHIJJHQzLFtzcCwjYCgkaSsyKSUxNmAqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisJZW9yCSR0MCwkYSwkYSxyb3IjYCRTaWdtYTBbMV0tJFNpZ21hMFswXWAKKwlhZGQJJGgsJGgsJHQxCQkJQCBoKz1DaChlLGYsZykKKyNpZiAkaT09MzEKKwlhbmQJJHQyLCR0MiwjMHhmZgorCWNtcAkkdDIsIzB4ZjIJCQlAIGRvbmU/CiAjZW5kaWYKLQlvcnIJJHQwLCRhLCRiCi0JYW5kCSR0MSwkYSwkYgotCWFuZAkkdDAsJHQwLCRjCi0JYWRkCSRoLCRoLCRUMQotCW9ycgkkdDAsJHQwLCR0MQkJCUAgTWFqKGEsYixjKQotCWFkZAkkZCwkZCwkVDEKLQlhZGQJJGgsJGgsJHQwCisjaWYgJGk8MTUKKyMgaWYgX19BUk1fQVJDSF9fPj03CisJbGRyCSR0MSxbJGlucF0sIzQJCQlAIHByZWZldGNoCisjIGVsc2UKKwlsZHJiCSR0MSxbJGlucCwjM10KKyMgZW5kaWYKKwllb3IJJHQyLCRhLCRiCQkJQCBhXmIsIGJeYyBpbiBuZXh0IHJvdW5kCisjZWxzZQorCWxkcgkkdDEsW3NwLCNgKCRpKzIpJTE2YCo0XQkJQCBmcm9tIGZ1dHVyZSBCT0RZXzE2X3h4CisJZW9yCSR0MiwkYSwkYgkJCUAgYV5iLCBiXmMgaW4gbmV4dCByb3VuZAorCWxkcgkkdDQsW3NwLCNgKCRpKzE1KSUxNmAqNF0JQCBmcm9tIGZ1dHVyZSBCT0RZXzE2X3h4CisjZW5kaWYKKwllb3IJJHQwLCR0MCwkYSxyb3IjYCRTaWdtYTBbMl0tJFNpZ21hMFswXWAJQCBTaWdtYTAoYSkKKwlhbmQJJHQzLCR0MywkdDIJCQlAIChiXmMpJj0oYV5iKQorCWFkZAkkZCwkZCwkaAkJCUAgZCs9aAorCWVvcgkkdDMsJHQzLCRiCQkJQCBNYWooYSxiLGMpCisJYWRkCSRoLCRoLCR0MCxyb3IjJFNpZ21hMFswXQlAIGgrPVNpZ21hMChhKQorCUAgYWRkCSRoLCRoLCR0MwkJCUAgaCs9TWFqKGEsYixjKQogX19fCisJKCR0MiwkdDMpPSgkdDMsJHQyKTsKIH0KIAogc3ViIEJPRFlfMTZfWFggewogbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKSA9IEBfOwogCiAkY29kZS49PDxfX187Ci0JQCBsZHIJJHQzLFtzcCwjYCgkaSsxKSUxNmAqNF0JCUAgJGkKLQlsZHIJJHQyLFtzcCwjYCgkaSsxNCklMTZgKjRdCi0JbW92CSR0MCwkdDMscm9yIyRzaWdtYTBbMF0KLQlsZHIJJFQxLFtzcCwjYCgkaSswKSUxNmAqNF0KLQllb3IJJHQwLCR0MCwkdDMscm9yIyRzaWdtYTBbMV0KLQlsZHIJJHQxLFtzcCwjYCgkaSs5KSUxNmAqNF0KLQllb3IJJHQwLCR0MCwkdDMsbHNyIyRzaWdtYTBbMl0JQCBzaWdtYTAoWFtpKzFdKQotCW1vdgkkdDMsJHQyLHJvciMkc2lnbWExWzBdCi0JYWRkCSRUMSwkVDEsJHQwCi0JZW9yCSR0MywkdDMsJHQyLHJvciMkc2lnbWExWzFdCi0JYWRkCSRUMSwkVDEsJHQxCi0JZW9yCSR0MywkdDMsJHQyLGxzciMkc2lnbWExWzJdCUAgc2lnbWExKFhbaSsxNF0pCi0JQCBhZGQJJFQxLCRUMSwkdDMKKwlAIGxkcgkkdDEsW3NwLCNgKCRpKzEpJTE2YCo0XQkJQCAkaQorCUAgbGRyCSR0NCxbc3AsI2AoJGkrMTQpJTE2YCo0XQorCW1vdgkkdDAsJHQxLHJvciMkc2lnbWEwWzBdCisJYWRkCSRhLCRhLCR0MgkJCUAgaCs9TWFqKGEsYixjKSBmcm9tIHRoZSBwYXN0CisJbW92CSR0MiwkdDQscm9yIyRzaWdtYTFbMF0KKwllb3IJJHQwLCR0MCwkdDEscm9yIyRzaWdtYTBbMV0KKwllb3IJJHQyLCR0MiwkdDQscm9yIyRzaWdtYTFbMV0KKwllb3IJJHQwLCR0MCwkdDEsbHNyIyRzaWdtYTBbMl0JQCBzaWdtYTAoWFtpKzFdKQorCWxkcgkkdDEsW3NwLCNgKCRpKzApJTE2YCo0XQorCWVvcgkkdDIsJHQyLCR0NCxsc3IjJHNpZ21hMVsyXQlAIHNpZ21hMShYW2krMTRdKQorCWxkcgkkdDQsW3NwLCNgKCRpKzkpJTE2YCo0XQorCisJYWRkCSR0MiwkdDIsJHQwCisJZW9yCSR0MCwkZSwkZSxyb3IjYCRTaWdtYTFbMV0tJFNpZ21hMVswXWAJQCBmcm9tIEJPRFlfMDBfMTUKKwlhZGQJJHQxLCR0MSwkdDIKKwllb3IJJHQwLCR0MCwkZSxyb3IjYCRTaWdtYTFbMl0tJFNpZ21hMVswXWAJQCBTaWdtYTEoZSkKKwlhZGQJJHQxLCR0MSwkdDQJCQlAIFhbaV0KIF9fXwogCSZCT0RZXzAwXzE1KEBfKTsKIH0KQEAgLTE0Nyw0NiArMTc2LDY0IEBAIEsyNTY6CiAud29yZAkweDc0OGY4MmVlLDB4NzhhNTYzNmYsMHg4NGM4NzgxNCwweDhjYzcwMjA4CiAud29yZAkweDkwYmVmZmZhLDB4YTQ1MDZjZWIsMHhiZWY5YTNmNywweGM2NzE3OGYyCiAuc2l6ZQlLMjU2LC4tSzI1NgorLndvcmQJMAkJCQlAIHRlcm1pbmF0b3IKKy5MT1BFTlNTTF9hcm1jYXA6Cisud29yZAlPUEVOU1NMX2FybWNhcF9QLXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyCisuYWxpZ24JNQogCiAuZ2xvYmFsCXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyCiAudHlwZQlzaGEyNTZfYmxvY2tfZGF0YV9vcmRlciwlZnVuY3Rpb24KIHNoYTI1Nl9ibG9ja19kYXRhX29yZGVyOgogCXN1YglyMyxwYywjOAkJQCBzaGEyNTZfYmxvY2tfZGF0YV9vcmRlcgogCWFkZAkkbGVuLCRpbnAsJGxlbixsc2wjNglAIGxlbiB0byBwb2ludCBhdCB0aGUgZW5kIG9mIGlucAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMTIsLkxPUEVOU1NMX2FybWNhcAorCWxkcglyMTIsW3IzLHIxMl0JCUAgT1BFTlNTTF9hcm1jYXBfUAorCXRzdAlyMTIsI0FSTVY4X1NIQTI1NgorCWJuZQkuTEFSTXY4CisJdHN0CXIxMiwjQVJNVjdfTkVPTgorCWJuZQkuTE5FT04KKyNlbmRpZgogCXN0bWRiCXNwISx7JGN0eCwkaW5wLCRsZW4scjQtcjExLGxyfQogCWxkbWlhCSRjdHgseyRBLCRCLCRDLCRELCRFLCRGLCRHLCRIfQotCXN1YgkkS3RibCxyMywjMjU2CQlAIEsyNTYKKwlzdWIJJEt0YmwscjMsIzI1NiszMglAIEsyNTYKIAlzdWIJc3Asc3AsIzE2KjQJCUAgYWxsb2NhKFhbMTZdKQogLkxvb3A6CisjIGlmIF9fQVJNX0FSQ0hfXz49NworCWxkcgkkdDEsWyRpbnBdLCM0CisjIGVsc2UKKwlsZHJiCSR0MSxbJGlucCwjM10KKyMgZW5kaWYKKwllb3IJJHQzLCRCLCRDCQlAIG1hZ2ljCisJZW9yCSR0MiwkdDIsJHQyCiBfX18KIGZvcigkaT0wOyRpPDE2OyRpKyspCXsgJkJPRFlfMDBfMTUoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiAkY29kZS49Ii5Mcm91bmRzXzE2X3h4OlxuIjsKIGZvciAoOyRpPDMyOyRpKyspCXsgJkJPRFlfMTZfWFgoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiAkY29kZS49PDxfX187Ci0JYW5kCSR0MiwkdDIsIzB4ZmYKLQljbXAJJHQyLCMweGYyCisJbGRyZXEJJHQzLFtzcCwjMTYqNF0JCUAgcHVsbCBjdHgKIAlibmUJLkxyb3VuZHNfMTZfeHgKIAotCWxkcgkkVDEsW3NwLCMxNio0XQkJQCBwdWxsIGN0eAotCWxkcgkkdDAsWyRUMSwjMF0KLQlsZHIJJHQxLFskVDEsIzRdCi0JbGRyCSR0MixbJFQxLCM4XQorCWFkZAkkQSwkQSwkdDIJCUAgaCs9TWFqKGEsYixjKSBmcm9tIHRoZSBwYXN0CisJbGRyCSR0MCxbJHQzLCMwXQorCWxkcgkkdDEsWyR0MywjNF0KKwlsZHIJJHQyLFskdDMsIzhdCiAJYWRkCSRBLCRBLCR0MAotCWxkcgkkdDAsWyRUMSwjMTJdCisJbGRyCSR0MCxbJHQzLCMxMl0KIAlhZGQJJEIsJEIsJHQxCi0JbGRyCSR0MSxbJFQxLCMxNl0KKwlsZHIJJHQxLFskdDMsIzE2XQogCWFkZAkkQywkQywkdDIKLQlsZHIJJHQyLFskVDEsIzIwXQorCWxkcgkkdDIsWyR0MywjMjBdCiAJYWRkCSRELCRELCR0MAotCWxkcgkkdDAsWyRUMSwjMjRdCisJbGRyCSR0MCxbJHQzLCMyNF0KIAlhZGQJJEUsJEUsJHQxCi0JbGRyCSR0MSxbJFQxLCMyOF0KKwlsZHIJJHQxLFskdDMsIzI4XQogCWFkZAkkRiwkRiwkdDIKIAlsZHIJJGlucCxbc3AsIzE3KjRdCQlAIHB1bGwgaW5wCiAJbGRyCSR0Mixbc3AsIzE4KjRdCQlAIHB1bGwgaW5wK2xlbgogCWFkZAkkRywkRywkdDAKIAlhZGQJJEgsJEgsJHQxCi0Jc3RtaWEJJFQxLHskQSwkQiwkQywkRCwkRSwkRiwkRywkSH0KKwlzdG1pYQkkdDMseyRBLCRCLCRDLCRELCRFLCRGLCRHLCRIfQogCWNtcAkkaW5wLCR0MgogCXN1YgkkS3RibCwkS3RibCwjMjU2CUAgcmV3aW5kIEt0YmwKIAlibmUJLkxvb3AKQEAgLTIwMCwxMiArMjQ3LDQxMCBAQCAkY29kZS49PDxfX187CiAJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAogCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCiAjZW5kaWYKLS5zaXplICAgc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGEyNTZfYmxvY2tfZGF0YV9vcmRlcgotLmFzY2l6ICAiU0hBMjU2IGJsb2NrIHRyYW5zZm9ybSBmb3IgQVJNdjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisuc2l6ZQlzaGEyNTZfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyCitfX18KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTkVPTiBzdHVmZgorIwore3t7CitteSBAWD1tYXAoInEkXyIsKDAuLjMpKTsKK215ICgkVDAsJFQxLCRUMiwkVDMsJFQ0LCRUNSk9KCJxOCIsInE5IiwicTEwIiwicTExIiwiZDI0IiwiZDI1Iik7CitteSAkWGZlcj0kdDQ7CitteSAkaj0wOworCitzdWIgRGxvKCkgICB7IHNoaWZ0PX5tfHEoWzFdP1swLTldKXw/ImQiLigkMSoyKToiIjsgICAgIH0KK3N1YiBEaGkoKSAgIHsgc2hpZnQ9fm18cShbMV0/WzAtOV0pfD8iZCIuKCQxKjIrMSk6IiI7ICAgfQorCitzdWIgQVVUT0xPQUQoKSAgICAgICAgICAjIHRodW5rIFtzaW1wbGlmaWVkXSB4ODYtc3R5bGUgcGVybGFzbQoreyBteSAkb3Bjb2RlID0gJEFVVE9MT0FEOyAkb3Bjb2RlID1+IHMvLio6Oi8vOyAkb3Bjb2RlID1+IHMvXy9cLi87CisgIG15ICRhcmcgPSBwb3A7CisgICAgJGFyZyA9ICIjJGFyZyIgaWYgKCRhcmcqMSBlcSAkYXJnKTsKKyAgICAkY29kZSAuPSAiXHQkb3Bjb2RlXHQiLmpvaW4oJywnLEBfLCRhcmcpLiJcbiI7Cit9CisKK3N1YiBYdXBkYXRlKCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOworICBteSAoJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpOworCisJJnZleHRfOAkJKCRUMCxAWFswXSxAWFsxXSw0KTsJIyBYWzEuLjRdCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZleHRfOAkJKCRUMSxAWFsyXSxAWFszXSw0KTsJIyBYWzkuLjEyXQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2c2hyX3UzMgkoJFQyLCRUMCwkc2lnbWEwWzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdmFkZF9pMzIJKEBYWzBdLEBYWzBdLCRUMSk7CSMgWFswLi4zXSArPSBYWzkuLjEyXQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2c2hyX3UzMgkoJFQxLCRUMCwkc2lnbWEwWzJdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnNsaV8zMgkoJFQyLCRUMCwzMi0kc2lnbWEwWzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnNocl91MzIJKCRUMywkVDAsJHNpZ21hMFsxXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZlb3IJCSgkVDEsJFQxLCRUMik7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZzbGlfMzIJKCRUMywkVDAsMzItJHNpZ21hMFsxXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdnNocl91MzIJKCRUNCwmRGhpKEBYWzNdKSwkc2lnbWExWzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdmVvcgkJKCRUMSwkVDEsJFQzKTsJCSMgc2lnbWEwKFhbMS4uNF0pCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdnNsaV8zMgkoJFQ0LCZEaGkoQFhbM10pLDMyLSRzaWdtYTFbMF0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZzaHJfdTMyCSgkVDUsJkRoaShAWFszXSksJHNpZ21hMVsyXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZhZGRfaTMyCShAWFswXSxAWFswXSwkVDEpOwkjIFhbMC4uM10gKz0gc2lnbWEwKFhbMS4uNF0pCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdmVvcgkJKCRUNSwkVDUsJFQ0KTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2c2hyX3UzMgkoJFQ0LCZEaGkoQFhbM10pLCRzaWdtYTFbMV0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZzbGlfMzIJKCRUNCwmRGhpKEBYWzNdKSwzMi0kc2lnbWExWzFdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2ZW9yCQkoJFQ1LCRUNSwkVDQpOwkJIyBzaWdtYTEoWFsxNC4uMTVdKQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2YWRkX2kzMgkoJkRsbyhAWFswXSksJkRsbyhAWFswXSksJFQ1KTsjIFhbMC4uMV0gKz0gc2lnbWExKFhbMTQuLjE1XSkKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2c2hyX3UzMgkoJFQ0LCZEbG8oQFhbMF0pLCRzaWdtYTFbMF0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZzbGlfMzIJKCRUNCwmRGxvKEBYWzBdKSwzMi0kc2lnbWExWzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2c2hyX3UzMgkoJFQ1LCZEbG8oQFhbMF0pLCRzaWdtYTFbMl0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZlb3IJCSgkVDUsJFQ1LCRUNCk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdnNocl91MzIJKCRUNCwmRGxvKEBYWzBdKSwkc2lnbWExWzFdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdmxkMV8zMgkoInskVDB9IiwiWyRLdGJsLDoxMjhdISIpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZzbGlfMzIJKCRUNCwmRGxvKEBYWzBdKSwzMi0kc2lnbWExWzFdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2ZW9yCQkoJFQ1LCRUNSwkVDQpOwkJIyBzaWdtYTEoWFsxNi4uMTddKQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2YWRkX2kzMgkoJkRoaShAWFswXSksJkRoaShAWFswXSksJFQ1KTsjIFhbMi4uM10gKz0gc2lnbWExKFhbMTYuLjE3XSkKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdmFkZF9pMzIJKCRUMCwkVDAsQFhbMF0pOworCSB3aGlsZSgkI2luc25zPj0yKSB7IGV2YWwoc2hpZnQoQGluc25zKSk7IH0KKwkmdnN0MV8zMgkoInskVDB9IiwiWyRYZmVyLDoxMjhdISIpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJcHVzaChAWCxzaGlmdChAWCkpOwkJIyAicm90YXRlIiBYW10KK30KKworc3ViIFhwcmVsb2FkKCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOworICBteSAoJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZsZDFfMzIJKCJ7JFQwfSIsIlskS3RibCw6MTI4XSEiKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnJldjMyXzgJKEBYWzBdLEBYWzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdmFkZF9pMzIJKCRUMCwkVDAsQFhbMF0pOworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKKwkmdnN0MV8zMgkoInskVDB9IiwiWyRYZmVyLDoxMjhdISIpOworCisJcHVzaChAWCxzaGlmdChAWCkpOwkJIyAicm90YXRlIiBYW10KK30KKworc3ViIGJvZHlfMDBfMTUgKCkgeworCSgKKwknKCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKT1AVjsnLgorCScmYWRkCSgkaCwkaCwkdDEpJywJCQkjIGgrPVhbaV0rS1tpXQorCScmZW9yCSgkdDEsJGYsJGcpJywKKwknJmVvcgkoJHQwLCRlLCRlLCJyb3IjIi4oJFNpZ21hMVsxXS0kU2lnbWExWzBdKSknLAorCScmYWRkCSgkYSwkYSwkdDIpJywJCQkjIGgrPU1haihhLGIsYykgZnJvbSB0aGUgcGFzdAorCScmYW5kCSgkdDEsJHQxLCRlKScsCisJJyZlb3IJKCR0MiwkdDAsJGUsInJvciMiLigkU2lnbWExWzJdLSRTaWdtYTFbMF0pKScsCSMgU2lnbWExKGUpCisJJyZlb3IJKCR0MCwkYSwkYSwicm9yIyIuKCRTaWdtYTBbMV0tJFNpZ21hMFswXSkpJywKKwknJmVvcgkoJHQxLCR0MSwkZyknLAkJCSMgQ2goZSxmLGcpCisJJyZhZGQJKCRoLCRoLCR0Miwicm9yIyRTaWdtYTFbMF0iKScsCSMgaCs9U2lnbWExKGUpCisJJyZlb3IJKCR0MiwkYSwkYiknLAkJCSMgYV5iLCBiXmMgaW4gbmV4dCByb3VuZAorCScmZW9yCSgkdDAsJHQwLCRhLCJyb3IjIi4oJFNpZ21hMFsyXS0kU2lnbWEwWzBdKSknLAkjIFNpZ21hMChhKQorCScmYWRkCSgkaCwkaCwkdDEpJywJCQkjIGgrPUNoKGUsZixnKQorCScmbGRyCSgkdDEsc3ByaW50ZiAiW3NwLCMlZF0iLDQqKCgkaisxKSYxNSkpCWlmICgoJGomMTUpIT0xNSk7Jy4KKwknJmxkcgkoJHQxLCJbJEt0YmxdIikJCQkJaWYgKCRqPT0xNSk7Jy4KKwknJmxkcgkoJHQxLCJbc3AsIzY0XSIpCQkJaWYgKCRqPT0zMSknLAorCScmYW5kCSgkdDMsJHQzLCR0MiknLAkJCSMgKGJeYykmPShhXmIpCisJJyZhZGQJKCRkLCRkLCRoKScsCQkJIyBkKz1oCisJJyZhZGQJKCRoLCRoLCR0MCwicm9yIyRTaWdtYTBbMF0iKTsnLgkjIGgrPVNpZ21hMChhKQorCScmZW9yCSgkdDMsJHQzLCRiKScsCQkJIyBNYWooYSxiLGMpCisJJyRqKys7CXVuc2hpZnQoQFYscG9wKEBWKSk7ICgkdDIsJHQzKT0oJHQzLCR0Mik7JworCSkKK30KKworJGNvZGUuPTw8X19fOworI2lmIF9fQVJNX0FSQ0hfXz49NworLmZwdQluZW9uCisKKy50eXBlCXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyX25lb24sJWZ1bmN0aW9uCisuYWxpZ24JNAorc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXJfbmVvbjoKKy5MTkVPTjoKKwlzdG1kYglzcCEse3I0LXIxMixscn0KKworCW1vdgkkdDIsc3AKKwlzdWIJc3Asc3AsIzE2KjQrMTYJCUAgYWxsb2NhCisJc3ViCSRLdGJsLHIzLCMyNTYrMzIJQCBLMjU2CisJYmljCXNwLHNwLCMxNQkJQCBhbGlnbiBmb3IgMTI4LWJpdCBzdG9yZXMKKworCXZsZDEuOAkJe0BYWzBdfSxbJGlucF0hCisJdmxkMS44CQl7QFhbMV19LFskaW5wXSEKKwl2bGQxLjgJCXtAWFsyXX0sWyRpbnBdIQorCXZsZDEuOAkJe0BYWzNdfSxbJGlucF0hCisJdmxkMS4zMgkJeyRUMH0sWyRLdGJsLDoxMjhdIQorCXZsZDEuMzIJCXskVDF9LFskS3RibCw6MTI4XSEKKwl2bGQxLjMyCQl7JFQyfSxbJEt0YmwsOjEyOF0hCisJdmxkMS4zMgkJeyRUM30sWyRLdGJsLDoxMjhdIQorCXZyZXYzMi44CUBYWzBdLEBYWzBdCQlAIHllcywgZXZlbiBvbgorCXN0cgkJJGN0eCxbc3AsIzY0XQorCXZyZXYzMi44CUBYWzFdLEBYWzFdCQlAIGJpZy1lbmRpYW4KKwlzdHIJCSRpbnAsW3NwLCM2OF0KKwltb3YJCSRYZmVyLHNwCisJdnJldjMyLjgJQFhbMl0sQFhbMl0KKwlzdHIJCSRsZW4sW3NwLCM3Ml0KKwl2cmV2MzIuOAlAWFszXSxAWFszXQorCXN0cgkJJHQyLFtzcCwjNzZdCQlAIHNhdmUgb3JpZ2luYWwgc3AKKwl2YWRkLmkzMgkkVDAsJFQwLEBYWzBdCisJdmFkZC5pMzIJJFQxLCRUMSxAWFsxXQorCXZzdDEuMzIJCXskVDB9LFskWGZlciw6MTI4XSEKKwl2YWRkLmkzMgkkVDIsJFQyLEBYWzJdCisJdnN0MS4zMgkJeyRUMX0sWyRYZmVyLDoxMjhdIQorCXZhZGQuaTMyCSRUMywkVDMsQFhbM10KKwl2c3QxLjMyCQl7JFQyfSxbJFhmZXIsOjEyOF0hCisJdnN0MS4zMgkJeyRUM30sWyRYZmVyLDoxMjhdIQorCisJbGRtaWEJCSRjdHgseyRBLSRIfQorCXN1YgkJJFhmZXIsJFhmZXIsIzY0CisJbGRyCQkkdDEsW3NwLCMwXQorCWVvcgkJJHQyLCR0MiwkdDIKKwllb3IJCSR0MywkQiwkQworCWIJCS5MXzAwXzQ4CisKKy5hbGlnbgk0CisuTF8wMF80ODoKK19fXworCSZYdXBkYXRlKFwmYm9keV8wMF8xNSk7CisJJlh1cGRhdGUoXCZib2R5XzAwXzE1KTsKKwkmWHVwZGF0ZShcJmJvZHlfMDBfMTUpOworCSZYdXBkYXRlKFwmYm9keV8wMF8xNSk7CiskY29kZS49PDxfX187CisJdGVxCSR0MSwjMAkJCQlAIGNoZWNrIGZvciBLMjU2IHRlcm1pbmF0b3IKKwlsZHIJJHQxLFtzcCwjMF0KKwlzdWIJJFhmZXIsJFhmZXIsIzY0CisJYm5lCS5MXzAwXzQ4CisKKwlsZHIJCSRpbnAsW3NwLCM2OF0KKwlsZHIJCSR0MCxbc3AsIzcyXQorCXN1YgkJJEt0YmwsJEt0YmwsIzI1NglAIHJld2luZCAkS3RibAorCXRlcQkJJGlucCwkdDAKKwlzdWJlcQkJJGlucCwkaW5wLCM2NAkJQCBhdm9pZCBTRUdWCisJdmxkMS44CQl7QFhbMF19LFskaW5wXSEJCUAgbG9hZCBuZXh0IGlucHV0IGJsb2NrCisJdmxkMS44CQl7QFhbMV19LFskaW5wXSEKKwl2bGQxLjgJCXtAWFsyXX0sWyRpbnBdIQorCXZsZDEuOAkJe0BYWzNdfSxbJGlucF0hCisJc3RybmUJCSRpbnAsW3NwLCM2OF0KKwltb3YJCSRYZmVyLHNwCitfX18KKwkmWHByZWxvYWQoXCZib2R5XzAwXzE1KTsKKwkmWHByZWxvYWQoXCZib2R5XzAwXzE1KTsKKwkmWHByZWxvYWQoXCZib2R5XzAwXzE1KTsKKwkmWHByZWxvYWQoXCZib2R5XzAwXzE1KTsKKyRjb2RlLj08PF9fXzsKKwlsZHIJJHQwLFskdDEsIzBdCisJYWRkCSRBLCRBLCR0MgkJCUAgaCs9TWFqKGEsYixjKSBmcm9tIHRoZSBwYXN0CisJbGRyCSR0MixbJHQxLCM0XQorCWxkcgkkdDMsWyR0MSwjOF0KKwlsZHIJJHQ0LFskdDEsIzEyXQorCWFkZAkkQSwkQSwkdDAJCQlAIGFjY3VtdWxhdGUKKwlsZHIJJHQwLFskdDEsIzE2XQorCWFkZAkkQiwkQiwkdDIKKwlsZHIJJHQyLFskdDEsIzIwXQorCWFkZAkkQywkQywkdDMKKwlsZHIJJHQzLFskdDEsIzI0XQorCWFkZAkkRCwkRCwkdDQKKwlsZHIJJHQ0LFskdDEsIzI4XQorCWFkZAkkRSwkRSwkdDAKKwlzdHIJJEEsWyR0MV0sIzQKKwlhZGQJJEYsJEYsJHQyCisJc3RyCSRCLFskdDFdLCM0CisJYWRkCSRHLCRHLCR0MworCXN0cgkkQyxbJHQxXSwjNAorCWFkZAkkSCwkSCwkdDQKKwlzdHIJJEQsWyR0MV0sIzQKKwlzdG1pYQkkdDEseyRFLSRIfQorCisJbW92bmUJJFhmZXIsc3AKKwlsZHJuZQkkdDEsW3NwLCMwXQorCWVvcm5lCSR0MiwkdDIsJHQyCisJbGRyZXEJc3AsW3NwLCM3Nl0JCQlAIHJlc3RvcmUgb3JpZ2luYWwgc3AKKwllb3JuZQkkdDMsJEIsJEMKKwlibmUJLkxfMDBfNDgKKworCWxkbWlhCXNwISx7cjQtcjEyLHBjfQorLnNpemUJc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXJfbmVvbiwuLXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyX25lb24KKyNlbmRpZgorX19fCit9fX0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQVJNdjggc3R1ZmYKKyMKK3t7eworbXkgKCRBQkNELCRFRkdILCRhYmNkKT1tYXAoInEkXyIsKDAuLjIpKTsKK215IEBNU0c9bWFwKCJxJF8iLCg4Li4xMSkpOworbXkgKCRXMCwkVzEsJEFCQ0RfU0FWRSwkRUZHSF9TQVZFKT1tYXAoInEkXyIsKDEyLi4xNSkpOworbXkgJEt0Ymw9InIzIjsKKworJGNvZGUuPTw8X19fOworI2lmIF9fQVJNX0FSQ0hfXz49NworLnR5cGUJc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXJfYXJtdjgsJWZ1bmN0aW9uCisuYWxpZ24JNQorc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXJfYXJtdjg6CisuTEFSTXY4OgorCXZsZDEuMzIJeyRBQkNELCRFRkdIfSxbJGN0eF0KKwlzdWIJJEt0YmwscjMsI3NoYTI1Nl9ibG9ja19kYXRhX29yZGVyLUsyNTYKKworLkxvb3Bfdjg6CisJdmxkMS44CQl7QE1TR1swXS1ATVNHWzFdfSxbJGlucF0hCisJdmxkMS44CQl7QE1TR1syXS1ATVNHWzNdfSxbJGlucF0hCisJdmxkMS4zMgkJeyRXMH0sWyRLdGJsXSEKKwl2cmV2MzIuOAlATVNHWzBdLEBNU0dbMF0KKwl2cmV2MzIuOAlATVNHWzFdLEBNU0dbMV0KKwl2cmV2MzIuOAlATVNHWzJdLEBNU0dbMl0KKwl2cmV2MzIuOAlATVNHWzNdLEBNU0dbM10KKwl2bW92CQkkQUJDRF9TQVZFLCRBQkNECUAgb2ZmbG9hZAorCXZtb3YJCSRFRkdIX1NBVkUsJEVGR0gKKwl0ZXEJCSRpbnAsJGxlbgorX19fCitmb3IoJGk9MDskaTwxMjskaSsrKSB7CiskY29kZS49PDxfX187CisJdmxkMS4zMgkJeyRXMX0sWyRLdGJsXSEKKwl2YWRkLmkzMgkkVzAsJFcwLEBNU0dbMF0KKwlzaGEyNTZzdTAJQE1TR1swXSxATVNHWzFdCisJdm1vdgkJJGFiY2QsJEFCQ0QKKwlzaGEyNTZoCQkkQUJDRCwkRUZHSCwkVzAKKwlzaGEyNTZoMgkkRUZHSCwkYWJjZCwkVzAKKwlzaGEyNTZzdTEJQE1TR1swXSxATVNHWzJdLEBNU0dbM10KK19fXworCSgkVzAsJFcxKT0oJFcxLCRXMCk7CXB1c2goQE1TRyxzaGlmdChATVNHKSk7Cit9CiskY29kZS49PDxfX187CisJdmxkMS4zMgkJeyRXMX0sWyRLdGJsXSEKKwl2YWRkLmkzMgkkVzAsJFcwLEBNU0dbMF0KKwl2bW92CQkkYWJjZCwkQUJDRAorCXNoYTI1NmgJCSRBQkNELCRFRkdILCRXMAorCXNoYTI1NmgyCSRFRkdILCRhYmNkLCRXMAorCisJdmxkMS4zMgkJeyRXMH0sWyRLdGJsXSEKKwl2YWRkLmkzMgkkVzEsJFcxLEBNU0dbMV0KKwl2bW92CQkkYWJjZCwkQUJDRAorCXNoYTI1NmgJCSRBQkNELCRFRkdILCRXMQorCXNoYTI1NmgyCSRFRkdILCRhYmNkLCRXMQorCisJdmxkMS4zMgkJeyRXMX0sWyRLdGJsXQorCXZhZGQuaTMyCSRXMCwkVzAsQE1TR1syXQorCXN1YgkJJEt0YmwsJEt0YmwsIzI1Ni0xNglAIHJld2luZAorCXZtb3YJCSRhYmNkLCRBQkNECisJc2hhMjU2aAkJJEFCQ0QsJEVGR0gsJFcwCisJc2hhMjU2aDIJJEVGR0gsJGFiY2QsJFcwCisKKwl2YWRkLmkzMgkkVzEsJFcxLEBNU0dbM10KKwl2bW92CQkkYWJjZCwkQUJDRAorCXNoYTI1NmgJCSRBQkNELCRFRkdILCRXMQorCXNoYTI1NmgyCSRFRkdILCRhYmNkLCRXMQorCisJdmFkZC5pMzIJJEFCQ0QsJEFCQ0QsJEFCQ0RfU0FWRQorCXZhZGQuaTMyCSRFRkdILCRFRkdILCRFRkdIX1NBVkUKKwlibmUJCS5Mb29wX3Y4CisKKwl2c3QxLjMyCQl7JEFCQ0QsJEVGR0h9LFskY3R4XQorCisJcmV0CQlAIGJ4IGxyCisuc2l6ZQlzaGEyNTZfYmxvY2tfZGF0YV9vcmRlcl9hcm12OCwuLXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyX2FybXY4CisjZW5kaWYKK19fXworfX19CiskY29kZS49PDxfX187CisuYXNjaXogICJTSEEyNTYgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12NC9ORU9OL0FSTXY4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgogLmFsaWduCTIKKy5jb21tICAgT1BFTlNTTF9hcm1jYXBfUCw0LDQKIF9fXwogCi0kY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKLSRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0Ci1wcmludCAkY29kZTsKK3sgICBteSAgJW9wY29kZSA9ICgKKwkic2hhMjU2aCIJPT4gMHhmMzAwMGM0MCwJInNoYTI1NmgyIgk9PiAweGYzMTAwYzQwLAorCSJzaGEyNTZzdTAiCT0+IDB4ZjNiYTAzYzAsCSJzaGEyNTZzdTEiCT0+IDB4ZjMyMDBjNDAJKTsKKworICAgIHN1YiB1bnNoYTI1NiB7CisJbXkgKCRtbmVtb25pYywkYXJnKT1AXzsKKworCWlmICgkYXJnID1+IG0vcShbMC05XSspKD86LFxzKnEoWzAtOV0rKSk/LFxzKnEoWzAtOV0rKS9vKSB7CisJICAgIG15ICR3b3JkID0gJG9wY29kZXskbW5lbW9uaWN9fCgoJDEmNyk8PDEzKXwoKCQxJjgpPDwxOSkKKwkJCQkJIHwoKCQyJjcpPDwxNyl8KCgkMiY4KTw8NCkKKwkJCQkJIHwoKCQzJjcpPDwxKSB8KCgkMyY4KTw8Mik7CisJICAgICMgc2luY2UgQVJNdjcgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgZW5jb2RlZCBsaXR0bGUtZW5kaWFuLgorCSAgICAjIGNvcnJlY3Qgc29sdXRpb24gaXMgdG8gdXNlIC5pbnN0IGRpcmVjdGl2ZSwgYnV0IG9sZGVyCisJICAgICMgYXNzZW1ibGVycyBkb24ndCBpbXBsZW1lbnQgaXQ6LSgKKwkgICAgc3ByaW50ZiAiLmJ5dGVcdDB4JTAyeCwweCUwMngsMHglMDJ4LDB4JTAyeFx0QCAlcyAlcyIsCisJCQkkd29yZCYweGZmLCgkd29yZD4+OCkmMHhmZiwKKwkJCSgkd29yZD4+MTYpJjB4ZmYsKCR3b3JkPj4yNCkmMHhmZiwKKwkJCSRtbmVtb25pYywkYXJnOworCX0KKyAgICB9Cit9CisKK2ZvcmVhY2ggKHNwbGl0KCQvLCRjb2RlKSkgeworCisJcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW87CisKKwlzL1xiKHNoYTI1Nlx3KylccysocS4qKS91bnNoYTI1NigkMSwkMikvZ2VvOworCisJcy9cYnJldFxiL2J4CWxyL2dvCQlvcgorCXMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ287CSMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0CisKKwlwcmludCAkXywiXG4iOworfQorCiBjbG9zZSBTVERPVVQ7ICMgZW5mb3JjZSBmbHVzaApkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnBsCmluZGV4IDdmYWYzN2IuLjcxYWE5MzUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1hcm12NC5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItYXJtdjQucGwKQEAgLTU2NSw3ICs1NjUsNyBAQCAkY29kZS49PDxfX187CiAJYm5lCQkuTG9vcF9uZW9uCiAKIAl2bGRtaWEJc3AhLHtkOC1kMTV9CQlAIGVwaWxvZ3VlCi0JYngJbHIKKwlyZXQJCQkJQCBieCBscgogI2VuZGlmCiBfX18KIH0KQEAgLTU3OCw1ICs1NzgsNiBAQCBfX18KIAogJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CiAkY29kZSA9fiBzL1xiYnhccytsclxiLy53b3JkXHQweGUxMmZmZjFlL2dtOwkjIG1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoIC1tYXJjaD1hcm12NAorJGNvZGUgPX4gcy9cYnJldFxiL2J4CWxyL2dtOwogcHJpbnQgJGNvZGU7CiBjbG9zZSBTVERPVVQ7ICMgZW5mb3JjZSBmbHVzaApkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY4LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY4LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzVlZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItYXJtdjgucGwKQEAgLTAsMCArMSw0MTQgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFNIQTI1Ni81MTIgZm9yIEFSTXY4LgorIworIyBQZXJmb3JtYW5jZSBpbiBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlIGFuZCBpbXByb3ZlbWVudCBjb2VmZmljaWVudAorIyBvdmVyIGNvZGUgZ2VuZXJhdGVkIHdpdGggImRlZmF1bHQiIGNvbXBpbGVyOgorIworIwkJU0hBMjU2LWh3CVNIQTI1NigqKQlTSEE1MTIKKyMgQXBwbGUgQTcJMS45NwkJMTAuNSAoKzMzJSkJNi43MyAoLTElKCoqKSkKKyMgQ29ydGV4LUE1eAluL2EJCW4vYQkJbi9hCisjIAorIyAoKikJU29mdHdhcmUgU0hBMjU2IHJlc3VsdHMgYXJlIG9mIGxlc3NlciByZWxldmFuY2UsIHByZXNlbnRlZAorIwltb3N0bHkgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMuCisjICgqKikJVGhlIHJlc3VsdCBpcyBhIHRyYWRlLW9mZjogaXQncyBwb3NzaWJsZSB0byBpbXByb3ZlIGl0IGJ5CisjCTEwJSwgYnV0IGF0IHRoZSBjb3N0IG9mIDIwJSBsb3NzIG9uIENvcnRleC1BNXguCisKKyRmbGF2b3VyPXNoaWZ0OworJG91dHB1dD1zaGlmdDsKK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKK2lmICgkb3V0cHV0ID1+IC81MTIvKSB7CisJJEJJVFM9NTEyOworCSRTWj04OworCUBTaWdtYTA9KDI4LDM0LDM5KTsKKwlAU2lnbWExPSgxNCwxOCw0MSk7CisJQHNpZ21hMD0oMSwgIDgsIDcpOworCUBzaWdtYTE9KDE5LDYxLCA2KTsKKwkkcm91bmRzPTgwOworCSRyZWdfdD0ieCI7Cit9IGVsc2UgeworCSRCSVRTPTI1NjsKKwkkU1o9NDsKKwlAU2lnbWEwPSggMiwxMywyMik7CisJQFNpZ21hMT0oIDYsMTEsMjUpOworCUBzaWdtYTA9KCA3LDE4LCAzKTsKKwlAc2lnbWExPSgxNywxOSwxMCk7CisJJHJvdW5kcz02NDsKKwkkcmVnX3Q9InciOworfQorCiskZnVuYz0ic2hhJHtCSVRTfV9ibG9ja19kYXRhX29yZGVyIjsKKworKCRjdHgsJGlucCwkbnVtLCRLdGJsKT1tYXAoIngkXyIsKDAuLjIsMzApKTsKKworQFg9bWFwKCIkcmVnX3QkXyIsKDMuLjE1LDAuLjIpKTsKK0BWPSgkQSwkQiwkQywkRCwkRSwkRiwkRywkSCk9bWFwKCIkcmVnX3QkXyIsKDIwLi4yNykpOworKCR0MCwkdDEsJHQyLCR0Myk9bWFwKCIkcmVnX3QkXyIsKDE2LDE3LDE5LDI4KSk7CisKK3N1YiBCT0RZXzAwX3h4IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSwkZiwkZywkaCk9QF87CitteSAkaj0oJGkrMSkmMTU7CitteSAoJFQwLCRUMSwkVDIpPShAWFsoJGktOCkmMTVdLEBYWygkaS05KSYxNV0sQFhbKCRpLTEwKSYxNV0pOworICAgJFQwPUBYWyRpKzNdIGlmICgkaTwxMSk7CisKKyRjb2RlLj08PF9fXwlpZiAoJGk8MTYpOworI2lmbmRlZglfX0FSTUVCX18KKwlyZXYJQFhbJGldLEBYWyRpXQkJCS8vICRpCisjZW5kaWYKK19fXworJGNvZGUuPTw8X19fCWlmICgkaTwxMyAmJiAoJGkmMSkpOworCWxkcAlAWFskaSsxXSxAWFskaSsyXSxbJGlucF0sIzIqJFNaCitfX18KKyRjb2RlLj08PF9fXwlpZiAoJGk9PTEzKTsKKwlsZHAJQFhbMTRdLEBYWzE1XSxbJGlucF0KK19fXworJGNvZGUuPTw8X19fCWlmICgkaT49MTQpOworCWxkcglAWFsoJGktMTEpJjE1XSxbc3AsI2AkU1oqKCgkaS0xMSklNClgXQorX19fCiskY29kZS49PDxfX18JaWYgKCRpPjAgJiYgJGk8MTYpOworCWFkZAkkYSwkYSwkdDEJCQkvLyBoKz1TaWdtYTAoYSkKK19fXworJGNvZGUuPTw8X19fCWlmICgkaT49MTEpOworCXN0cglAWFsoJGktOCkmMTVdLFtzcCwjYCRTWiooKCRpLTgpJTQpYF0KK19fXworIyBXaGlsZSBBUk12OCBzcGVjaWZpZXMgbWVyZ2VkIHJvdGF0ZS1uLWxvZ2ljYWwgb3BlcmF0aW9uIHN1Y2ggYXMKKyMgJ2VvciB4LHkseixyb3IjbicsIGl0IHdhcyBmb3VuZCB0byBuZWdhdGl2ZWx5IGFmZmVjdCBwZXJmb3JtYW5jZQorIyBvbiBBcHBsZSBBNy4gVGhlIHJlYXNvbiBzZWVtcyB0byBiZSB0aGF0IGl0IHJlcXVpcmVzIGV2ZW4gJ3knIHRvCisjIGJlIGF2YWlsYWJsZSBlYXJsaWVyLiBUaGlzIG1lYW5zIHRoYXQgc3VjaCBtZXJnZWQgaW5zdHJ1Y3Rpb24gaXMKKyMgbm90IG5lY2Vzc2FyaWx5IGJlc3QgY2hvaWNlIG9uIGNyaXRpY2FsIHBhdGguLi4gT24gdGhlIG90aGVyIGhhbmQKKyMgQ29ydGV4LUE1eCBoYW5kbGVzIG1lcmdlZCBpbnN0cnVjdGlvbnMgbXVjaCBiZXR0ZXIgdGhhbiBkaXNqb2ludAorIyByb3RhdGUgYW5kIGxvZ2ljYWwuLi4gU2VlICgqKikgZm9vdG5vdGUgYWJvdmUuCiskY29kZS49PDxfX18JaWYgKCRpPDE1KTsKKwlyb3IJJHQwLCRlLCMkU2lnbWExWzBdCisJYWRkCSRoLCRoLCR0MgkJCS8vIGgrPUtbaV0KKwllb3IJJFQwLCRlLCRlLHJvciNgJFNpZ21hMVsyXS0kU2lnbWExWzFdYAorCWFuZAkkdDEsJGYsJGUKKwliaWMJJHQyLCRnLCRlCisJYWRkCSRoLCRoLEBYWyRpJjE1XQkJCS8vIGgrPVhbaV0KKwlvcnIJJHQxLCR0MSwkdDIJCQkvLyBDaChlLGYsZykKKwllb3IJJHQyLCRhLCRiCQkJLy8gYV5iLCBiXmMgaW4gbmV4dCByb3VuZAorCWVvcgkkdDAsJHQwLCRUMCxyb3IjJFNpZ21hMVsxXQkvLyBTaWdtYTEoZSkKKwlyb3IJJFQwLCRhLCMkU2lnbWEwWzBdCisJYWRkCSRoLCRoLCR0MQkJCS8vIGgrPUNoKGUsZixnKQorCWVvcgkkdDEsJGEsJGEscm9yI2AkU2lnbWEwWzJdLSRTaWdtYTBbMV1gCisJYWRkCSRoLCRoLCR0MAkJCS8vIGgrPVNpZ21hMShlKQorCWFuZAkkdDMsJHQzLCR0MgkJCS8vIChiXmMpJj0oYV5iKQorCWFkZAkkZCwkZCwkaAkJCS8vIGQrPWgKKwllb3IJJHQzLCR0MywkYgkJCS8vIE1haihhLGIsYykKKwllb3IJJHQxLCRUMCwkdDEscm9yIyRTaWdtYTBbMV0JLy8gU2lnbWEwKGEpCisJYWRkCSRoLCRoLCR0MwkJCS8vIGgrPU1haihhLGIsYykKKwlsZHIJJHQzLFskS3RibF0sIyRTWgkJLy8gKksrKywgJHQyIGluIG5leHQgcm91bmQKKwkvL2FkZAkkaCwkaCwkdDEJCQkvLyBoKz1TaWdtYTAoYSkKK19fXworJGNvZGUuPTw8X19fCWlmICgkaT49MTUpOworCXJvcgkkdDAsJGUsIyRTaWdtYTFbMF0KKwlhZGQJJGgsJGgsJHQyCQkJLy8gaCs9S1tpXQorCXJvcgkkVDEsQFhbKCRqKzEpJjE1XSwjJHNpZ21hMFswXQorCWFuZAkkdDEsJGYsJGUKKwlyb3IJJFQyLEBYWygkaisxNCkmMTVdLCMkc2lnbWExWzBdCisJYmljCSR0MiwkZywkZQorCXJvcgkkVDAsJGEsIyRTaWdtYTBbMF0KKwlhZGQJJGgsJGgsQFhbJGkmMTVdCQkJLy8gaCs9WFtpXQorCWVvcgkkdDAsJHQwLCRlLHJvciMkU2lnbWExWzFdCisJZW9yCSRUMSwkVDEsQFhbKCRqKzEpJjE1XSxyb3IjJHNpZ21hMFsxXQorCW9ycgkkdDEsJHQxLCR0MgkJCS8vIENoKGUsZixnKQorCWVvcgkkdDIsJGEsJGIJCQkvLyBhXmIsIGJeYyBpbiBuZXh0IHJvdW5kCisJZW9yCSR0MCwkdDAsJGUscm9yIyRTaWdtYTFbMl0JLy8gU2lnbWExKGUpCisJZW9yCSRUMCwkVDAsJGEscm9yIyRTaWdtYTBbMV0KKwlhZGQJJGgsJGgsJHQxCQkJLy8gaCs9Q2goZSxmLGcpCisJYW5kCSR0MywkdDMsJHQyCQkJLy8gKGJeYykmPShhXmIpCisJZW9yCSRUMiwkVDIsQFhbKCRqKzE0KSYxNV0scm9yIyRzaWdtYTFbMV0KKwllb3IJJFQxLCRUMSxAWFsoJGorMSkmMTVdLGxzciMkc2lnbWEwWzJdCS8vIHNpZ21hMChYW2krMV0pCisJYWRkCSRoLCRoLCR0MAkJCS8vIGgrPVNpZ21hMShlKQorCWVvcgkkdDMsJHQzLCRiCQkJLy8gTWFqKGEsYixjKQorCWVvcgkkdDEsJFQwLCRhLHJvciMkU2lnbWEwWzJdCS8vIFNpZ21hMChhKQorCWVvcgkkVDIsJFQyLEBYWygkaisxNCkmMTVdLGxzciMkc2lnbWExWzJdCS8vIHNpZ21hMShYW2krMTRdKQorCWFkZAlAWFskal0sQFhbJGpdLEBYWygkais5KSYxNV0KKwlhZGQJJGQsJGQsJGgJCQkvLyBkKz1oCisJYWRkCSRoLCRoLCR0MwkJCS8vIGgrPU1haihhLGIsYykKKwlsZHIJJHQzLFskS3RibF0sIyRTWgkJLy8gKksrKywgJHQyIGluIG5leHQgcm91bmQKKwlhZGQJQFhbJGpdLEBYWyRqXSwkVDEKKwlhZGQJJGgsJGgsJHQxCQkJLy8gaCs9U2lnbWEwKGEpCisJYWRkCUBYWyRqXSxAWFskal0sJFQyCitfX18KKwkoJHQyLCR0Myk9KCR0MywkdDIpOworfQorCiskY29kZS49PDxfX187CisjaW5jbHVkZSAiYXJtX2FyY2guaCIKKworLnRleHQKKworLmdsb2JsCSRmdW5jCisudHlwZQkkZnVuYywlZnVuY3Rpb24KKy5hbGlnbgk2CiskZnVuYzoKK19fXworJGNvZGUuPTw8X19fCWlmICgkU1o9PTQpOworCWxkcgl4MTYsLkxPUEVOU1NMX2FybWNhcF9QCisJYWRyCXgxNywuTE9QRU5TU0xfYXJtY2FwX1AKKwlhZGQJeDE2LHgxNix4MTcKKwlsZHIJdzE2LFt4MTZdCisJdHN0CXcxNiwjQVJNVjhfU0hBMjU2CisJYi5uZQkuTHY4X2VudHJ5CitfX18KKyRjb2RlLj08PF9fXzsKKwlzdHAJeDI5LHgzMCxbc3AsIy0xMjhdIQorCWFkZAl4Mjksc3AsIzAKKworCXN0cAl4MTkseDIwLFtzcCwjMTZdCisJc3RwCXgyMSx4MjIsW3NwLCMzMl0KKwlzdHAJeDIzLHgyNCxbc3AsIzQ4XQorCXN0cAl4MjUseDI2LFtzcCwjNjRdCisJc3RwCXgyNyx4MjgsW3NwLCM4MF0KKwlzdWIJc3Asc3AsIzQqJFNaCisKKwlsZHAJJEEsJEIsWyRjdHhdCQkJCS8vIGxvYWQgY29udGV4dAorCWxkcAkkQywkRCxbJGN0eCwjMiokU1pdCisJbGRwCSRFLCRGLFskY3R4LCM0KiRTWl0KKwlhZGQJJG51bSwkaW5wLCRudW0sbHNsI2Bsb2coMTYqJFNaKS9sb2coMilgCS8vIGVuZCBvZiBpbnB1dAorCWxkcAkkRywkSCxbJGN0eCwjNiokU1pdCisJYWRyCSRLdGJsLEskQklUUworCXN0cAkkY3R4LCRudW0sW3gyOSwjOTZdCisKKy5Mb29wOgorCWxkcAlAWFswXSxAWFsxXSxbJGlucF0sIzIqJFNaCisJbGRyCSR0MixbJEt0YmxdLCMkU1oJCQkvLyAqSysrCisJZW9yCSR0MywkQiwkQwkJCQkvLyBtYWdpYyBzZWVkCisJc3RyCSRpbnAsW3gyOSwjMTEyXQorX19fCitmb3IgKCRpPTA7JGk8MTY7JGkrKykJeyAmQk9EWV8wMF94eCgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj0iLkxvb3BfMTZfeHg6XG4iOworZm9yICg7JGk8MzI7JGkrKykJeyAmQk9EWV8wMF94eCgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsKKwljYm56CSR0MiwuTG9vcF8xNl94eAorCisJbGRwCSRjdHgsJG51bSxbeDI5LCM5Nl0KKwlsZHIJJGlucCxbeDI5LCMxMTJdCisJc3ViCSRLdGJsLCRLdGJsLCNgJFNaKigkcm91bmRzKzEpYAkJLy8gcmV3aW5kCisKKwlsZHAJQFhbMF0sQFhbMV0sWyRjdHhdCisJbGRwCUBYWzJdLEBYWzNdLFskY3R4LCMyKiRTWl0KKwlhZGQJJGlucCwkaW5wLCMxNCokU1oJCQkvLyBhZHZhbmNlIGlucHV0IHBvaW50ZXIKKwlsZHAJQFhbNF0sQFhbNV0sWyRjdHgsIzQqJFNaXQorCWFkZAkkQSwkQSxAWFswXQorCWxkcAlAWFs2XSxAWFs3XSxbJGN0eCwjNiokU1pdCisJYWRkCSRCLCRCLEBYWzFdCisJYWRkCSRDLCRDLEBYWzJdCisJYWRkCSRELCRELEBYWzNdCisJc3RwCSRBLCRCLFskY3R4XQorCWFkZAkkRSwkRSxAWFs0XQorCWFkZAkkRiwkRixAWFs1XQorCXN0cAkkQywkRCxbJGN0eCwjMiokU1pdCisJYWRkCSRHLCRHLEBYWzZdCisJYWRkCSRILCRILEBYWzddCisJY21wCSRpbnAsJG51bQorCXN0cAkkRSwkRixbJGN0eCwjNCokU1pdCisJc3RwCSRHLCRILFskY3R4LCM2KiRTWl0KKwliLm5lCS5Mb29wCisKKwlsZHAJeDE5LHgyMCxbeDI5LCMxNl0KKwlhZGQJc3Asc3AsIzQqJFNaCisJbGRwCXgyMSx4MjIsW3gyOSwjMzJdCisJbGRwCXgyMyx4MjQsW3gyOSwjNDhdCisJbGRwCXgyNSx4MjYsW3gyOSwjNjRdCisJbGRwCXgyNyx4MjgsW3gyOSwjODBdCisJbGRwCXgyOSx4MzAsW3NwXSwjMTI4CisJcmV0Cisuc2l6ZQkkZnVuYywuLSRmdW5jCisKKy5hbGlnbgk2CisudHlwZQlLJEJJVFMsJW9iamVjdAorSyRCSVRTOgorX19fCiskY29kZS49PDxfX18gaWYgKCRTWj09OCk7CisJLnF1YWQJMHg0MjhhMmY5OGQ3MjhhZTIyLDB4NzEzNzQ0OTEyM2VmNjVjZAorCS5xdWFkCTB4YjVjMGZiY2ZlYzRkM2IyZiwweGU5YjVkYmE1ODE4OWRiYmMKKwkucXVhZAkweDM5NTZjMjViZjM0OGI1MzgsMHg1OWYxMTFmMWI2MDVkMDE5CisJLnF1YWQJMHg5MjNmODJhNGFmMTk0ZjliLDB4YWIxYzVlZDVkYTZkODExOAorCS5xdWFkCTB4ZDgwN2FhOThhMzAzMDI0MiwweDEyODM1YjAxNDU3MDZmYmUKKwkucXVhZAkweDI0MzE4NWJlNGVlNGIyOGMsMHg1NTBjN2RjM2Q1ZmZiNGUyCisJLnF1YWQJMHg3MmJlNWQ3NGYyN2I4OTZmLDB4ODBkZWIxZmUzYjE2OTZiMQorCS5xdWFkCTB4OWJkYzA2YTcyNWM3MTIzNSwweGMxOWJmMTc0Y2Y2OTI2OTQKKwkucXVhZAkweGU0OWI2OWMxOWVmMTRhZDIsMHhlZmJlNDc4NjM4NGYyNWUzCisJLnF1YWQJMHgwZmMxOWRjNjhiOGNkNWI1LDB4MjQwY2ExY2M3N2FjOWM2NQorCS5xdWFkCTB4MmRlOTJjNmY1OTJiMDI3NSwweDRhNzQ4NGFhNmVhNmU0ODMKKwkucXVhZAkweDVjYjBhOWRjYmQ0MWZiZDQsMHg3NmY5ODhkYTgzMTE1M2I1CisJLnF1YWQJMHg5ODNlNTE1MmVlNjZkZmFiLDB4YTgzMWM2NmQyZGI0MzIxMAorCS5xdWFkCTB4YjAwMzI3Yzg5OGZiMjEzZiwweGJmNTk3ZmM3YmVlZjBlZTQKKwkucXVhZAkweGM2ZTAwYmYzM2RhODhmYzIsMHhkNWE3OTE0NzkzMGFhNzI1CisJLnF1YWQJMHgwNmNhNjM1MWUwMDM4MjZmLDB4MTQyOTI5NjcwYTBlNmU3MAorCS5xdWFkCTB4MjdiNzBhODU0NmQyMmZmYywweDJlMWIyMTM4NWMyNmM5MjYKKwkucXVhZAkweDRkMmM2ZGZjNWFjNDJhZWQsMHg1MzM4MGQxMzlkOTViM2RmCisJLnF1YWQJMHg2NTBhNzM1NDhiYWY2M2RlLDB4NzY2YTBhYmIzYzc3YjJhOAorCS5xdWFkCTB4ODFjMmM5MmU0N2VkYWVlNiwweDkyNzIyYzg1MTQ4MjM1M2IKKwkucXVhZAkweGEyYmZlOGExNGNmMTAzNjQsMHhhODFhNjY0YmJjNDIzMDAxCisJLnF1YWQJMHhjMjRiOGI3MGQwZjg5NzkxLDB4Yzc2YzUxYTMwNjU0YmUzMAorCS5xdWFkCTB4ZDE5MmU4MTlkNmVmNTIxOCwweGQ2OTkwNjI0NTU2NWE5MTAKKwkucXVhZAkweGY0MGUzNTg1NTc3MTIwMmEsMHgxMDZhYTA3MDMyYmJkMWI4CisJLnF1YWQJMHgxOWE0YzExNmI4ZDJkMGM4LDB4MWUzNzZjMDg1MTQxYWI1MworCS5xdWFkCTB4Mjc0ODc3NGNkZjhlZWI5OSwweDM0YjBiY2I1ZTE5YjQ4YTgKKwkucXVhZAkweDM5MWMwY2IzYzVjOTVhNjMsMHg0ZWQ4YWE0YWUzNDE4YWNiCisJLnF1YWQJMHg1YjljY2E0Zjc3NjNlMzczLDB4NjgyZTZmZjNkNmIyYjhhMworCS5xdWFkCTB4NzQ4ZjgyZWU1ZGVmYjJmYywweDc4YTU2MzZmNDMxNzJmNjAKKwkucXVhZAkweDg0Yzg3ODE0YTFmMGFiNzIsMHg4Y2M3MDIwODFhNjQzOWVjCisJLnF1YWQJMHg5MGJlZmZmYTIzNjMxZTI4LDB4YTQ1MDZjZWJkZTgyYmRlOQorCS5xdWFkCTB4YmVmOWEzZjdiMmM2NzkxNSwweGM2NzE3OGYyZTM3MjUzMmIKKwkucXVhZAkweGNhMjczZWNlZWEyNjYxOWMsMHhkMTg2YjhjNzIxYzBjMjA3CisJLnF1YWQJMHhlYWRhN2RkNmNkZTBlYjFlLDB4ZjU3ZDRmN2ZlZTZlZDE3OAorCS5xdWFkCTB4MDZmMDY3YWE3MjE3NmZiYSwweDBhNjM3ZGM1YTJjODk4YTYKKwkucXVhZAkweDExM2Y5ODA0YmVmOTBkYWUsMHgxYjcxMGIzNTEzMWM0NzFiCisJLnF1YWQJMHgyOGRiNzdmNTIzMDQ3ZDg0LDB4MzJjYWFiN2I0MGM3MjQ5MworCS5xdWFkCTB4M2M5ZWJlMGExNWM5YmViYywweDQzMWQ2N2M0OWMxMDBkNGMKKwkucXVhZAkweDRjYzVkNGJlY2IzZTQyYjYsMHg1OTdmMjk5Y2ZjNjU3ZTJhCisJLnF1YWQJMHg1ZmNiNmZhYjNhZDZmYWVjLDB4NmM0NDE5OGM0YTQ3NTgxNworCS5xdWFkCTAJLy8gdGVybWluYXRvcgorX19fCiskY29kZS49PDxfX18gaWYgKCRTWj09NCk7CisJLmxvbmcJMHg0MjhhMmY5OCwweDcxMzc0NDkxLDB4YjVjMGZiY2YsMHhlOWI1ZGJhNQorCS5sb25nCTB4Mzk1NmMyNWIsMHg1OWYxMTFmMSwweDkyM2Y4MmE0LDB4YWIxYzVlZDUKKwkubG9uZwkweGQ4MDdhYTk4LDB4MTI4MzViMDEsMHgyNDMxODViZSwweDU1MGM3ZGMzCisJLmxvbmcJMHg3MmJlNWQ3NCwweDgwZGViMWZlLDB4OWJkYzA2YTcsMHhjMTliZjE3NAorCS5sb25nCTB4ZTQ5YjY5YzEsMHhlZmJlNDc4NiwweDBmYzE5ZGM2LDB4MjQwY2ExY2MKKwkubG9uZwkweDJkZTkyYzZmLDB4NGE3NDg0YWEsMHg1Y2IwYTlkYywweDc2Zjk4OGRhCisJLmxvbmcJMHg5ODNlNTE1MiwweGE4MzFjNjZkLDB4YjAwMzI3YzgsMHhiZjU5N2ZjNworCS5sb25nCTB4YzZlMDBiZjMsMHhkNWE3OTE0NywweDA2Y2E2MzUxLDB4MTQyOTI5NjcKKwkubG9uZwkweDI3YjcwYTg1LDB4MmUxYjIxMzgsMHg0ZDJjNmRmYywweDUzMzgwZDEzCisJLmxvbmcJMHg2NTBhNzM1NCwweDc2NmEwYWJiLDB4ODFjMmM5MmUsMHg5MjcyMmM4NQorCS5sb25nCTB4YTJiZmU4YTEsMHhhODFhNjY0YiwweGMyNGI4YjcwLDB4Yzc2YzUxYTMKKwkubG9uZwkweGQxOTJlODE5LDB4ZDY5OTA2MjQsMHhmNDBlMzU4NSwweDEwNmFhMDcwCisJLmxvbmcJMHgxOWE0YzExNiwweDFlMzc2YzA4LDB4Mjc0ODc3NGMsMHgzNGIwYmNiNQorCS5sb25nCTB4MzkxYzBjYjMsMHg0ZWQ4YWE0YSwweDViOWNjYTRmLDB4NjgyZTZmZjMKKwkubG9uZwkweDc0OGY4MmVlLDB4NzhhNTYzNmYsMHg4NGM4NzgxNCwweDhjYzcwMjA4CisJLmxvbmcJMHg5MGJlZmZmYSwweGE0NTA2Y2ViLDB4YmVmOWEzZjcsMHhjNjcxNzhmMgorCS5sb25nCTAJLy90ZXJtaW5hdG9yCitfX18KKyRjb2RlLj08PF9fXzsKKy5zaXplCUskQklUUywuLUskQklUUworLmFsaWduCTMKKy5MT1BFTlNTTF9hcm1jYXBfUDoKKwkucXVhZAlPUEVOU1NMX2FybWNhcF9QLS4KKy5hc2NpegkiU0hBJEJJVFMgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12OCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5hbGlnbgkyCitfX18KKworaWYgKCRTWj09NCkgeworbXkgJEt0Ymw9IngzIjsKKworbXkgKCRBQkNELCRFRkdILCRhYmNkKT1tYXAoInYkXy4xNmIiLCgwLi4yKSk7CitteSBATVNHPW1hcCgidiRfLjE2YiIsKDQuLjcpKTsKK215ICgkVzAsJFcxKT0oInYxNi40cyIsInYxNy40cyIpOworbXkgKCRBQkNEX1NBVkUsJEVGR0hfU0FWRSk9KCJ2MTguMTZiIiwidjE5LjE2YiIpOworCiskY29kZS49PDxfX187CisudHlwZQlzaGEyNTZfYmxvY2tfYXJtdjgsJWZ1bmN0aW9uCisuYWxpZ24JNgorc2hhMjU2X2Jsb2NrX2FybXY4OgorLkx2OF9lbnRyeToKKwlzdHAJCXgyOSx4MzAsW3NwLCMtMTZdIQorCWFkZAkJeDI5LHNwLCMwCisKKwlsZDEuMzIJCXskQUJDRCwkRUZHSH0sWyRjdHhdCisJYWRyCQkkS3RibCxLMjU2CisKKy5Mb29wX2h3OgorCWxkMQkJe0BNU0dbMF0tQE1TR1szXX0sWyRpbnBdLCM2NAorCXN1YgkJJG51bSwkbnVtLCMxCisJbGQxLjMyCQl7JFcwfSxbJEt0YmxdLCMxNgorCXJldjMyCQlATVNHWzBdLEBNU0dbMF0KKwlyZXYzMgkJQE1TR1sxXSxATVNHWzFdCisJcmV2MzIJCUBNU0dbMl0sQE1TR1syXQorCXJldjMyCQlATVNHWzNdLEBNU0dbM10KKwlvcnIJCSRBQkNEX1NBVkUsJEFCQ0QsJEFCQ0QJCS8vIG9mZmxvYWQKKwlvcnIJCSRFRkdIX1NBVkUsJEVGR0gsJEVGR0gKK19fXworZm9yKCRpPTA7JGk8MTI7JGkrKykgeworJGNvZGUuPTw8X19fOworCWxkMS4zMgkJeyRXMX0sWyRLdGJsXSwjMTYKKwlhZGQuaTMyCQkkVzAsJFcwLEBNU0dbMF0KKwlzaGEyNTZzdTAJQE1TR1swXSxATVNHWzFdCisJb3JyCQkkYWJjZCwkQUJDRCwkQUJDRAorCXNoYTI1NmgJCSRBQkNELCRFRkdILCRXMAorCXNoYTI1NmgyCSRFRkdILCRhYmNkLCRXMAorCXNoYTI1NnN1MQlATVNHWzBdLEBNU0dbMl0sQE1TR1szXQorX19fCisJKCRXMCwkVzEpPSgkVzEsJFcwKTsJcHVzaChATVNHLHNoaWZ0KEBNU0cpKTsKK30KKyRjb2RlLj08PF9fXzsKKwlsZDEuMzIJCXskVzF9LFskS3RibF0sIzE2CisJYWRkLmkzMgkJJFcwLCRXMCxATVNHWzBdCisJb3JyCQkkYWJjZCwkQUJDRCwkQUJDRAorCXNoYTI1NmgJCSRBQkNELCRFRkdILCRXMAorCXNoYTI1NmgyCSRFRkdILCRhYmNkLCRXMAorCisJbGQxLjMyCQl7JFcwfSxbJEt0YmxdLCMxNgorCWFkZC5pMzIJCSRXMSwkVzEsQE1TR1sxXQorCW9ycgkJJGFiY2QsJEFCQ0QsJEFCQ0QKKwlzaGEyNTZoCQkkQUJDRCwkRUZHSCwkVzEKKwlzaGEyNTZoMgkkRUZHSCwkYWJjZCwkVzEKKworCWxkMS4zMgkJeyRXMX0sWyRLdGJsXQorCWFkZC5pMzIJCSRXMCwkVzAsQE1TR1syXQorCXN1YgkJJEt0YmwsJEt0YmwsIyRyb3VuZHMqJFNaLTE2CS8vIHJld2luZAorCW9ycgkJJGFiY2QsJEFCQ0QsJEFCQ0QKKwlzaGEyNTZoCQkkQUJDRCwkRUZHSCwkVzAKKwlzaGEyNTZoMgkkRUZHSCwkYWJjZCwkVzAKKworCWFkZC5pMzIJCSRXMSwkVzEsQE1TR1szXQorCW9ycgkJJGFiY2QsJEFCQ0QsJEFCQ0QKKwlzaGEyNTZoCQkkQUJDRCwkRUZHSCwkVzEKKwlzaGEyNTZoMgkkRUZHSCwkYWJjZCwkVzEKKworCWFkZC5pMzIJCSRBQkNELCRBQkNELCRBQkNEX1NBVkUKKwlhZGQuaTMyCQkkRUZHSCwkRUZHSCwkRUZHSF9TQVZFCisKKwljYm56CQkkbnVtLC5Mb29wX2h3CisKKwlzdDEuMzIJCXskQUJDRCwkRUZHSH0sWyRjdHhdCisKKwlsZHIJCXgyOSxbc3BdLCMxNgorCXJldAorLnNpemUJc2hhMjU2X2Jsb2NrX2FybXY4LC4tc2hhMjU2X2Jsb2NrX2FybXY4CitfX18KK30KKworJGNvZGUuPTw8X19fOworLmNvbW0JT1BFTlNTTF9hcm1jYXBfUCw0LDQKK19fXworCit7ICAgbXkgICVvcGNvZGUgPSAoCisJInNoYTI1NmgiCT0+IDB4NWUwMDQwMDAsCSJzaGEyNTZoMiIJPT4gMHg1ZTAwNTAwMCwKKwkic2hhMjU2c3UwIgk9PiAweDVlMjgyODAwLAkic2hhMjU2c3UxIgk9PiAweDVlMDA2MDAwCSk7CisKKyAgICBzdWIgdW5zaGEyNTYgeworCW15ICgkbW5lbW9uaWMsJGFyZyk9QF87CisKKwkkYXJnID1+IG0vW3F2XShbMC05XSspW14sXSosXHMqW3F2XShbMC05XSspW14sXSooPzosXHMqW3F2XShbMC05XSspKT8vbworCSYmCisJc3ByaW50ZiAiLmluc3RcdDB4JTA4eFx0Ly8lcyAlcyIsCisJCQkkb3Bjb2RleyRtbmVtb25pY318JDF8KCQyPDw1KXwoJDM8PDE2KSwKKwkJCSRtbmVtb25pYywkYXJnOworICAgIH0KK30KKworZm9yZWFjaChzcGxpdCgiXG4iLCRjb2RlKSkgeworCisJcy9cYChbXlxgXSopXGAvZXZhbCgkMSkvZ2VvOworCisJcy9cYihzaGEyNTZcdyspXHMrKFtxdl0uKikvdW5zaGEyNTYoJDEsJDIpL2dlbzsKKworCXMvXC5cdz8zMlxiLy9vCQlhbmQgcy9cLjE2Yi9cLjRzL2dvOworCW0vKGxkfHN0KTFbXlxbXStcWzBcXS9vCWFuZCBzL1wuNHMvXC5zL2dvOworCisJcHJpbnQgJF8sIlxuIjsKK30KKworY2xvc2UgU1RET1VUOwo=