ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTY4NmQ0Zi4uYWUyNThkOSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTY3Nyw3ICs2NzcsNiBAQAogR2FyeSBKZW5uZWpvaG4gPGdhcnlqQGRlbnguZGU+CiAKIAlzbWRrMjQwMAlBUk05MjBUCi0JdHJhYgkJQVJNOTIwVAogCiBNYXR0aGlhcyBLYWVobGNrZSA8bWF0dGhpYXNAa2FlaGxja2UubmV0PgogCWVkYjkzMDEJCQlBUk05MjBUIChFUDkzMDEpCmRpZmYgLS1naXQgYS9NQUtFQUxMIGIvTUFLRUFMTAppbmRleCA1MGMwMDgwLi41MWRiMTNlIDEwMDc1NQotLS0gYS9NQUtFQUxMCisrKyBiL01BS0VBTEwKQEAgLTM3NCw3ICszNzQsNiBAQAogCXNwZWFyMzIwCQlcCiAJc3BlYXI2MDAJCVwKIAlzdWVuMwkJCVwKLQl0cmFiCQkJXAogCVZDTUE5CQkJXAogCXZlcnNhdGlsZQkJXAogCXZlcnNhdGlsZWFiCQlcCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGQxNDk1NWYuLjQxNDM3ZGEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC05MzcsMjkgKzkzNyw2IEBACiAJZmk7CiAJQCQoTUtDT05GSUcpIC1uICRAIFNYMSBhcm0gYXJtOTI1dCBzeDEKIAotIyBUUkFCIGRlZmF1bHQgY29uZmlndXJhdGlvbjoJOCBNQiBGbGFzaCwgMzIgTUIgUkFNCi10cmFiX2NvbmZpZyBcCi10cmFiX2JpZ3JhbV9jb25maWcgXAotdHJhYl9iaWdmbGFzaF9jb25maWcgXAotdHJhYl9vbGRfY29uZmlnOgl1bmNvbmZpZwotCUBta2RpciAtcCAkKG9iailpbmNsdWRlCi0JQG1rZGlyIC1wICQob2JqKWJvYXJkL3RyYWIKLQlAWyAteiAiJChmaW5kc3RyaW5nIF9iaWdyYW0sJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19GTEFTSF84TUIiICA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCi0JCSAgZWNobyAiI2RlZmluZSBDT05GSUdfUkFNXzMyTUIiICAgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCQl9Ci0JQFsgLXogIiQoZmluZHN0cmluZyBfYmlnZmxhc2gsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19GTEFTSF8xNk1CIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCi0JCSAgZWNobyAiI2RlZmluZSBDT05GSUdfUkFNXzE2TUIiICAgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAotCQkgIGVjaG8gIkNPTkZJR19TWVNfVEVYVF9CQVNFID0gMHgwQ0Y0MDAwMCIgPiQob2JqKWJvYXJkL3RyYWIvY29uZmlnLnRtcCA7IFwKLQkJfQotCUBbIC16ICIkKGZpbmRzdHJpbmcgX29sZCwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0ZMQVNIXzhNQiIgID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKLQkJICBlY2hvICIjZGVmaW5lIENPTkZJR19SQU1fMTZNQiIgICA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCi0JCSAgZWNobyAiQ09ORklHX1NZU19URVhUX0JBU0UgPSAweDBDRjQwMDAwIiA+JChvYmopYm9hcmQvdHJhYi9jb25maWcudG1wIDsgXAotCQl9Ci0JQCQoTUtDT05GSUcpIC1uICRAIC1hIHRyYWIgYXJtIGFybTkyMHQgdHJhYiAtIHMzYzI0eDAKLQogdHgyNV9jb25maWcJOiB1bmNvbmZpZwogCUBlY2hvICJDT05GSUdfTkFORF9VX0JPT1QgPSB5IiA+PiAkKG9iailpbmNsdWRlL2NvbmZpZy5tawogCUAkKE1LQ09ORklHKSAkQCBhcm0gYXJtOTI2ZWpzIHR4MjUga2FybyBteDI1CkBAIC0xMDc5LDcgKzEwNTYsNyBAQAogCUBybSAtZiAkKG9iailib2FyZC9jcmF5L0wxL3tib290c2NyaXB0LmMsYm9vdHNjcmlwdC5pbWFnZX0JICBcCiAJICAgICAgICQob2JqKWJvYXJkL21hdHJpeF92aXNpb24vKi9ib290c2NyaXB0LmltZwkJICBcCiAJICAgICAgICQob2JqKWJvYXJkL25ldHN0YXIve2VlcHJvbSxjcmNlayxjcmNpdCwqLnNyZWMsKi5iaW59CSAgXAotCSAgICAgICAkKG9iailib2FyZC90cmFiL3RyYWJfZmt0ICAgJChvYmopYm9hcmQvdm9pY2VibHVlL2VlcHJvbSAgIFwKKwkgICAgICAgJChvYmopYm9hcmQvdm9pY2VibHVlL2VlcHJvbSAJCQkJICBcCiAJICAgICAgICQob2JqKWJvYXJkL2FybWx0ZC97aW50ZWdyYXRvcmFwLGludGVncmF0b3JjcH0vdS1ib290LmxkcyAgXAogCSAgICAgICAkKG9iail1LWJvb3QubGRzCQkJCQkJICBcCiAJICAgICAgICQob2JqKWFyY2gvYmxhY2tmaW4vY3B1L2Jvb3Ryb20tYXNtLW9mZnNldHMuW2Noc10KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA4YmI5YzhkLi40NDY5NjZkIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC03MTYsNyArNzE2LDYgQEAKIAkJQ09ORklHX0NNRF9TUEkJCSogU1BJIHNlcmlhbCBidXMgc3VwcG9ydAogCQlDT05GSUdfQ01EX1RGVFBTUlYJKiBURlRQIHRyYW5zZmVyIGluIHNlcnZlciBtb2RlCiAJCUNPTkZJR19DTURfVVNCCQkqIFVTQiBzdXBwb3J0Ci0JCUNPTkZJR19DTURfVkZECQkqIFZGRCBzdXBwb3J0IChUUkFCKQogCQlDT05GSUdfQ01EX0NEUAkJKiBDaXNjbyBEaXNjb3ZlciBQcm90b2NvbCBzdXBwb3J0CiAJCUNPTkZJR19DTURfRlNMCQkqIE1pY3JvYmxhemUgRlNMIHN1cHBvcnQKIApAQCAtMjIzMCw3ICsyMjI5LDcgQEAKIE1vZGVtIFN1cHBvcnQ6CiAtLS0tLS0tLS0tLS0tLQogCi1bc28gZmFyIG9ubHkgZm9yIFNNREsyNDAwIGFuZCBUUkFCIGJvYXJkc10KK1tzbyBmYXIgb25seSBmb3IgU01ESzI0MDAgYm9hcmRzXQogCiAtIE1vZGVtIHN1cHBvcnQgZW5hYmxlOgogCQlDT05GSUdfTU9ERU1fU1VQUE9SVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY3B1L2FybTkyMHQvczNjMjR4MC90aW1lci5jIGIvYXJjaC9hcm0vY3B1L2FybTkyMHQvczNjMjR4MC90aW1lci5jCmluZGV4IDhjZjlmZjYuLmYxN2I3ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NwdS9hcm05MjB0L3MzYzI0eDAvdGltZXIuYworKysgYi9hcmNoL2FybS9jcHUvYXJtOTIwdC9zM2MyNHgwL3RpbWVyLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogewogCXVsb25nIHRiY2xrOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU01ESzI0MDApIHx8IGRlZmluZWQoQ09ORklHX1RSQUIpCisjaWYgZGVmaW5lZChDT05GSUdfU01ESzI0MDApCiAJdGJjbGsgPSB0aW1lcl9sb2FkX3ZhbCAqIDEwMDsKICNlbGlmIGRlZmluZWQoQ09ORklHX1NCQzI0MTBYKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19TTURLMjQxMCkgfHwgXApAQCAtMTk4LDEyICsxOTgsNiBAQAogewogCXN0cnVjdCBzM2MyNHgwX3dhdGNoZG9nICp3YXRjaGRvZzsKIAotI2lmZGVmIENPTkZJR19UUkFCCi0JZXh0ZXJuIHZvaWQgZGlzYWJsZV92ZmQodm9pZCk7Ci0KLQlkaXNhYmxlX3ZmZCgpOwotI2VuZGlmCi0KIAl3YXRjaGRvZyA9IHMzYzI0eDBfZ2V0X2Jhc2Vfd2F0Y2hkb2coKTsKIAogCS8qIERpc2FibGUgd2F0Y2hkb2cgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsb2JhbF9kYXRhLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbG9iYWxfZGF0YS5oCmluZGV4IDJhODRkMjcuLmQ0YzlhZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsb2JhbF9kYXRhLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2xvYmFsX2RhdGEuaApAQCAtNDEsOSArNDEsNiBAQAogCXVuc2lnbmVkIGxvbmcJZW52X2FkZHI7CS8qIEFkZHJlc3MgIG9mIEVudmlyb25tZW50IHN0cnVjdCAqLwogCXVuc2lnbmVkIGxvbmcJZW52X3ZhbGlkOwkvKiBDaGVja3N1bSBvZiBFbnZpcm9ubWVudCB2YWxpZD8gKi8KIAl1bnNpZ25lZCBsb25nCWZiX2Jhc2U7CS8qIGJhc2UgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KLSNpZmRlZiBDT05GSUdfVkZECi0JdW5zaWduZWQgY2hhcgl2ZmRfdHlwZTsJLyogZGlzcGxheSB0eXBlICovCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfRlNMX0VTREhDCiAJdW5zaWduZWQgbG9uZwlzZGhjX2NsazsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2JvYXJkLmMgYi9hcmNoL2FybS9saWIvYm9hcmQuYwppbmRleCAxYTc4NGExLi5lN2FmM2QyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvYm9hcmQuYworKysgYi9hcmNoL2FybS9saWIvYm9hcmQuYwpAQCAtMzQ0LDE3ICszNDQsNiBAQAogCWFkZHIgJj0gfig0MDk2IC0gMSk7CiAJZGVidWcgKCJUb3Agb2YgUkFNIHVzYWJsZSBmb3IgVS1Cb290IGF0OiAlMDhseFxuIiwgYWRkcik7CiAKLSNpZmRlZiBDT05GSUdfVkZECi0jCWlmbmRlZiBQQUdFX1NJWkUKLSMJICBkZWZpbmUgUEFHRV9TSVpFIDQwOTYKLSMJZW5kaWYKLQkvKgotCSAqIHJlc2VydmUgbWVtb3J5IGZvciBWRkQgZGlzcGxheSAoYWx3YXlzIGZ1bGwgcGFnZXMpCi0JICovCi0JYWRkciAtPSB2ZmRfc2V0bWVtIChhZGRyKTsKLQlnZC0+ZmJfYmFzZSA9IGFkZHI7Ci0jZW5kaWYgLyogQ09ORklHX1ZGRCAqLwotCiAjaWZkZWYgQ09ORklHX0xDRAogI2lmZGVmIENPTkZJR19GQl9BRERSCiAJZ2QtPmZiX2Jhc2UgPSBDT05GSUdfRkJfQUREUjsKQEAgLTUzMywxMSArNTIyLDYgQEAKIAkvKiBpbml0aWFsaXplIGVudmlyb25tZW50ICovCiAJZW52X3JlbG9jYXRlICgpOwogCi0jaWZkZWYgQ09ORklHX1ZGRAotCS8qIG11c3QgZG8gdGhpcyBhZnRlciB0aGUgZnJhbWVidWZmZXIgaXMgYWxsb2NhdGVkICovCi0JZHJ2X3ZmZF9pbml0KCk7Ci0jZW5kaWYgLyogQ09ORklHX1ZGRCAqLwotCiAJLyogSVAgQWRkcmVzcyAqLwogCWdkLT5iZC0+YmlfaXBfYWRkciA9IGdldGVudl9JUGFkZHIgKCJpcGFkZHIiKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9NYWtlZmlsZSBiL2JvYXJkL3RyYWIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZGE0MGMuLjAwMDAwMDAKLS0tIGEvYm9hcmQvdHJhYi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSMgcHJvamVjdC4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSMgTUEgMDIxMTEtMTMwNyBVU0EKLSMKLQotaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCi0KLUxJQgk9ICQob2JqKWxpYiQoQk9BUkQpLm8KLQotQ09CSlMJOj0gdHJhYi5vIGZsYXNoLm8gdmZkLm8gY21kX3RyYWIubyBtZW1vcnkubyB0c2MyMDAwLm8gYXV0b191cGRhdGUubwotU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCi0KLUNPQkpTX0ZLVCA6PSB0cmFiX2ZrdC5vIHJzNDg1Lm8gdHNjMjAwMC5vCi0KLVNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgJChDT0JKU19GS1Q6Lm89LmMpCi1PQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKLVNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKLQotT0JKU19GS1QgOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlNfRktUKSkKLQotTE9BRF9BRERSID0gMHhjMTAwMDAwCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotYWxsOgkkKExJQikgJChvYmopdHJhYl9ma3Quc3JlYyAkKG9iail0cmFiX2ZrdC5iaW4KLQotJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKLQkkKGNhbGwgY21kX2xpbmtfb190YXJnZXQsICQoT0JKUykgJChTT0JKUykpCi0KLSQob2JqKXRyYWJfZmt0LnNyZWM6CSQoT0JKU19GS1QpICQoTElCKQotCSQoTEQpIC1nIC1UdGV4dCAkKExPQURfQUREUikgLW8gJCg8Oi5vPSkgLWUgdHJhYl9ma3QgJF4gJChMSUIpIFwKLQkJLUwkKG9iaikuLi8uLi9leGFtcGxlcy9zdGFuZGFsb25lIC1sc3R1YnMgXAotCQktTCQob2JqKS4uLy4uL2xpYiAtbGdlbmVyaWMgXAotCQkkKFBMQVRGT1JNX0xJQlMpCi0JJChPQkpDT1BZKSAtTyBzcmVjICQoPDoubz0pICRACi0KLSQob2JqKXRyYWJfZmt0LmJpbjoJJChvYmopdHJhYl9ma3Quc3JlYwotCSQoT0JKQ09QWSkgLUkgc3JlYyAtTyBiaW5hcnkgJDwgJEAKLQotY2xlYW46Ci0Jcm0gLWYgJChTT0JKUykgJChPQkpTKSAkKE9CSlNfRktUKQotCi1kaXN0Y2xlYW46CWNsZWFuCi0Jcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgJChvYmopLmRlcGVuZAotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAotaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCi0KLXNpbmNsdWRlICQob2JqKS5kZXBlbmQKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9QdDEwMDBfdGVtcF9kYXRhLmggYi9ib2FyZC90cmFiL1B0MTAwMF90ZW1wX2RhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdlOWVkNy4uMDAwMDAwMAotLS0gYS9ib2FyZC90cmFiL1B0MTAwMF90ZW1wX2RhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBEYXRhIGZpbGUgZm9yIHRzYzIwMDAgZHJpdmVyLgotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFdvbGZnYW5nIERlbmssIHdkQGRlbnguZGUKLSAqLwotCi0jaWZuZGVmIF9QVDEwMDBfVEVNUF9EQVRBX0gKLSNkZWZpbmUgX1BUMTAwMF9URU1QX0RBVEFfSAotCi1sb25nIFB0MTAwMF90ZW1wX3RhYmxlW11bMl0gPSB7Ci0JLyogRm9yIHF1aWNrIHJhbmdlIGNoZWNraW5nIHRoZSBsYXJnZXN0IGVsZW1lbnQKLQkgKiBpcyBwbGFjZWQgYXQgaW5kZXggMC4KLQkgKiBVLCBuViAgICBULCBDKjEwMAotCSAqLwotCXsgNDQwMDAwMDAgLCAxMjE2NSB9LAotCXsgLTEwMDAwMDAwICwgLTI2NDQgfSwKLQl7IC05MDAwMDAwICwgLTIzODEgfSwKLQl7IC04MDAwMDAwICwgLTIxMTggfSwKLQl7IC03MDAwMDAwICwgLTE4NTUgfSwKLQl7IC02MDAwMDAwICwgLTE1OTEgfSwKLQl7IC01MDAwMDAwICwgLTEzMjcgfSwKLQl7IC00MDAwMDAwICwgLTEwNjMgfSwKLQl7IC0zMDAwMDAwICwgLTc5OCB9LAotCXsgLTIwMDAwMDAgLCAtNTMyIH0sCi0JeyAtMTAwMDAwMCAsIC0yNjYgfSwKLQl7IDAgLCAwMDAgfSwKLQl7IDEwMDAwMDAgLCAyNjcgfSwKLQl7IDIwMDAwMDAgLCA1MzQgfSwKLQl7IDMwMDAwMDAgLCA4MDIgfSwKLQl7IDQwMDAwMDAgLCAxMDcwIH0sCi0JeyA1MDAwMDAwICwgMTMzOCB9LAotCXsgNjAwMDAwMCAsIDE2MDcgfSwKLQl7IDcwMDAwMDAgLCAxODc2IH0sCi0JeyA4MDAwMDAwICwgMjE0NiB9LAotCXsgOTAwMDAwMCAsIDI0MTYgfSwKLQl7IDEwMDAwMDAwICwgMjY4NyB9LAotCXsgMTEwMDAwMDAgLCAyOTU4IH0sCi0JeyAxMjAwMDAwMCAsIDMyMzAgfSwKLQl7IDEzMDAwMDAwICwgMzUwMiB9LAotCXsgMTQwMDAwMDAgLCAzNzc0IH0sCi0JeyAxNTAwMDAwMCAsIDQwNDcgfSwKLQl7IDE2MDAwMDAwICwgNDMyMSB9LAotCXsgMTcwMDAwMDAgLCA0NTk1IH0sCi0JeyAxODAwMDAwMCAsIDQ4NjkgfSwKLQl7IDE5MDAwMDAwICwgNTE0NCB9LAotCXsgMjAwMDAwMDAgLCA1NDE5IH0sCi0JeyAyMTAwMDAwMCAsIDU2OTQgfSwKLQl7IDIyMDAwMDAwICwgNTk3MSB9LAotCXsgMjMwMDAwMDAgLCA2MjQ3IH0sCi0JeyAyNDAwMDAwMCAsIDY1MjQgfSwKLQl7IDI1MDAwMDAwICwgNjgwMiB9LAotCXsgMjYwMDAwMDAgLCA3MDgwIH0sCi0JeyAyNzAwMDAwMCAsIDczNTggfSwKLQl7IDI4MDAwMDAwICwgNzYzNyB9LAotCXsgMjkwMDAwMDAgLCA3OTE2IH0sCi0JeyAzMDAwMDAwMCAsIDgxOTYgfSwKLQl7IDMxMDAwMDAwICwgODQ3NiB9LAotCXsgMzIwMDAwMDAgLCA4NzU3IH0sCi0JeyAzMzAwMDAwMCAsIDkwMzkgfSwKLQl7IDM0MDAwMDAwICwgOTMyMCB9LAotCXsgMzUwMDAwMDAgLCA5NjAyIH0sCi0JeyAzNjAwMDAwMCAsIDk4ODUgfSwKLQl7IDM3MDAwMDAwICwgMTAxNjggfSwKLQl7IDM4MDAwMDAwICwgMTA0NTIgfSwKLQl7IDM5MDAwMDAwICwgMTA3MzYgfSwKLQl7IDQwMDAwMDAwICwgMTEwMjEgfSwKLQl7IDQxMDAwMDAwICwgMTEzMDYgfSwKLQl7IDQyMDAwMDAwICwgMTE1OTIgfSwKLQl7IDQzMDAwMDAwICwgMTE4NzkgfSwKLQl7IDQ0MDAwMDAwICwgMTIxNjUgfSwKLX07Ci0jZW5kaWYgLyogX1BUMTAwMF9URU1QX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9SRUFETUUua2JkIGIvYm9hcmQvdHJhYi9SRUFETUUua2JkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGIwMGJjLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3RyYWIvUkVBRE1FLmtiZAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLQotVGhlIFRSQUIga2V5Ym9hcmQgaW1wbGVtZW50YXRpb24gaXMgc2ltaWxhciB0byB0aGF0IGZvciBMV01PTiBhbmQKLVIzNjBNUEkgYm9hcmRzLiBUaGUgb25seSBkaWZmZXJlbmNlIGNvbmNlcm5zIGtleSBuYW1pbmcuIFRoZXJlIGFyZSA0Ci1rZXlzIG9uIFRSQUI6IDEsIDIsIDMsIDQuCi0KLTEpIFRoZSAia2JkIiBjb21tYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mCi0gICB0aGUga2V5cy4gRm9yIGV4YW1wbGUsCi0KLQlUUkFCICMga2JkCi0JS2V5czogMSAwIDEgMAotCi0gICBtZWFucyB0aGF0IGtleXMgMSBhbmQgMyBhcmUgcHJlc3NlZC4gVGhlIGtleWJvYXJkIHN0YXR1cyBpcyBhbHNvCi0gICBzdG9yZWQgaW4gdGhlICJrZXliZCIgZW52aXJvbm1lbnQgdmFyaWFibGUuIEluIHRoaXMgZXhhbXBsZSB3ZSBnZXQKLQotCWtleWJkPTEwMTAKLQotMikgVGhlICJwcmVib290IiB2YXJpYWJsZSBpcyBzZXQgYWNjb3JkaW5nIHRvIGN1cnJlbnQgZW52aXJvbm1lbnQKLSAgIHNldHRpbmdzIGFuZCBrZXlzIHByZXNzZWQuIFRoaXMgaXMgYW4gZXhhbXBsZToKLQotCVRSQUIgIyBzZXRlbnYgbWFnaWNfa2V5cyBYWQotCVRSQUIgIyBzZXRlbnYga2V5X21hZ2ljWCAxMgotCVRSQUIgIyBzZXRlbnYga2V5X2NtZFggZWNobyAjIyBLZXlzIDEgKyAyIHByZXNzZWQgIyNcO2VjaG8KLQlUUkFCICMgc2V0ZW52IGtleV9tYWdpY1kgMTMKLQlUUkFCICMgc2V0ZW52IGtleV9jbWRZIGVjaG8gIyMgS2V5cyAxICsgMyBwcmVzc2VkICMjXDtlY2hvCi0KLSAgIEhlcmUgIm1hZ2ljX2tleXM9WFkiIG1lYW5zIHRoYXQgdGhlICJrZXlfbWFnaWNYIiBhbmQgImtleV9tYWdpY1kiCi0gICB2YXJpYWJsZXMgd2lsbCBiZSBjaGVja2VkIGZvciBhIG1hdGNoLiBFYWNoIHZhcmlhYmxlICJrZXlfbWFnaWMqIgotICAgZGVmaW5lcyBhIHNldCBvZiBrZXlzLiBJbiB0aGUgb3VyIGV4YW1wbGUsIGlmIGtleXMgMSBhbmQgMyBhcmUKLSAgIHByZXNzZWQgZHVyaW5nIHJlc2V0LCB0aGVuICJrZXlfbWFnaWNZIiBtYXRjaGVzLCBzbyB0aGUgInByZWJvb3QiCi0gICB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGUgY29udGVudHMgb2YgImtleV9jbWRZIjoKLQotCXByZWJvb3Q9ZWNobyAjIyBLZXlzIDEgKyAzIHByZXNzZWQgIyM7ZWNobwotCi0zKSBUaGUgVFJBQiBib2FyZCBoYXMgb3B0aW9uYWwgbW9kZW0gc3VwcG9ydC4gV2hlbiBhIGNlcnRhaW4ga2V5Ci0gICBjb21iaW5hdGlvbiBpcyBwcmVzc2VkIG9uIHRoZSBrZXlib2FyZCBhdCBwb3dlci1vbiwgdGhlIGZpcm13YXJlCi0gICBwZXJmb3JtcyB0aGUgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBtb2RlbSBhbmQgYWxsb3dzIGZvcgotICAgZGlhbC1pbi4gVGhlIGtleSBjb21iaW5hdGlvbiBpcyBzcGVjaWZpZWQgaW4gdGhlCi0gICAiaW5jbHVkZS9jb25maWdzL3RyYWIuaCIgZmlsZS4gRm9yIGV4YW1wbGU6Ci0KLQkjZGVmaW5lICAgICAgICBDT05GSUdfTU9ERU1fS0VZX01BR0lDICAiMjMiCi0KLSAgIG1lYW5zIHRoYXQgbW9kZW0gd2lsbCBiZSBpbml0aWFsaXplZCBpZiBhbmQgb25seSBpZiBib3RoIGtleXMgMiwgMwotICAgYXJlIHByZXNzZWQuIE5vdGUgdGhhdCB0aGUgZm9ybWF0IG9mIHRoaXMgc3RyaW5nIGlzIHNpbWlsYXIgdG8gdGhlCi0gICBmb3JtYXQgb2YgImtleV9tYWdpYyoiIGVudmlyb25tZW50IHZhcmlhYmxlcyBkZXNjcmliZWQgYWJvdmUuCmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL2F1dG9fdXBkYXRlLmMgYi9ib2FyZC90cmFiL2F1dG9fdXBkYXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYjg1MDUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvdHJhYi9hdXRvX3VwZGF0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjc2ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDMKLSAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBnYXJ5akBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jaW5jbHVkZSA8aW1hZ2UuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8dXNiLmg+Ci0KLSNpZmRlZiBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCi0jaW5jbHVkZSA8aHVzaC5oPgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVVUT19VUERBVEUKLQotI2lmbmRlZiBDT05GSUdfVVNCX09IQ0lfTkVXCi0jZXJyb3IgIm11c3QgZGVmaW5lIENPTkZJR19VU0JfT0hDSSIKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19VU0JfU1RPUkFHRQotI2Vycm9yICJtdXN0IGRlZmluZSBDT05GSUdfVVNCX1NUT1JBR0UiCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfU1lTX0hVU0hfUEFSU0VSCi0jZXJyb3IgIm11c3QgZGVmaW5lIENPTkZJR19TWVNfSFVTSF9QQVJTRVIiCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19DTURfRkFUKQotI2Vycm9yICJtdXN0IGRlZmluZSBDT05GSUdfQ01EX0ZBVCIKLSNlbmRpZgotCi0vKgotICogQ2hlY2sgd2hldGhlciBhIFVTQiBtZW1vcnkgc3RpY2sgaXMgcGx1Z2dlZCBpbi4KLSAqIElmIG9uZSBpcyBmb3VuZDoKLSAqCTEpIGlmIHByZXBhcmUuaW1nIGlzdCBmb3VuZCBsb2FkIGl0IGludG8gbWVtb3J5LiBJZiBpdCBpcwotICoJCXZhbGlkIHRoZW4gcnVuIGl0LgotICoJMikgaWYgcHJlaW5zdC5pbWcgaXMgZm91bmQgbG9hZCBpdCBpbnRvIG1lbW9yeS4gSWYgaXQgaXMKLSAqCQl2YWxpZCB0aGVuIHJ1biBpdC4gVXBkYXRlIHRoZSBFRVBST00uCi0gKgkzKSBpZiBmaXJtd18wMS5pbWcgaXMgZm91bmQgbG9hZCBpdCBpbnRvIG1lbW9yeS4gSWYgaXQgaXMgdmFsaWQsCi0gKgkJYnVybiBpdCBpbnRvIEZMQVNIIGFuZCB1cGRhdGUgdGhlIEVFUFJPTS4KLSAqCTQpIGlmIGtlcm5sXzAxLmltZyBpcyBmb3VuZCBsb2FkIGl0IGludG8gbWVtb3J5LiBJZiBpdCBpcyB2YWxpZCwKLSAqCQlidXJuIGl0IGludG8gRkxBU0ggYW5kIHVwZGF0ZSB0aGUgRUVQUk9NLgotICoJNSkgaWYgYXBwLmltZyBpcyBmb3VuZCBsb2FkIGl0IGludG8gbWVtb3J5LiBJZiBpdCBpcyB2YWxpZCwKLSAqCQlidXJuIGl0IGludG8gRkxBU0ggYW5kIHVwZGF0ZSB0aGUgRUVQUk9NLgotICoJNikgaWYgZGlzay5pbWcgaXMgZm91bmQgbG9hZCBpdCBpbnRvIG1lbW9yeS4gSWYgaXQgaXMgdmFsaWQsCi0gKgkJYnVybiBpdCBpbnRvIEZMQVNIIGFuZCB1cGRhdGUgdGhlIEVFUFJPTS4KLSAqCTcpIGlmIHBvc3RpbnN0LmltZyBpcyBmb3VuZCBsb2FkIGl0IGludG8gbWVtb3J5LiBJZiBpdCBpcwotICoJCXZhbGlkIHRoZW4gcnVuIGl0LiBVcGRhdGUgdGhlIEVFUFJPTS4KLSAqLwotCi0jdW5kZWYgQVVfREVCVUcKLQotI3VuZGVmIGRlYnVnCi0jaWZkZWYJQVVfREVCVUcKLSNkZWZpbmUgZGVidWcoZm10LGFyZ3MuLi4pCXByaW50ZiAoZm10ICwjI2FyZ3MpCi0jZWxzZQotI2RlZmluZSBkZWJ1ZyhmbXQsYXJncy4uLikKLSNlbmRpZgkvKiBBVV9ERUJVRyAqLwotCi0vKiBwb3NzaWJsZSBuYW1lcyBvZiBmaWxlcyBvbiB0aGUgVVNCIHN0aWNrLiAqLwotI2RlZmluZSBBVV9QUkVQQVJFCSJwcmVwYXJlLmltZyIKLSNkZWZpbmUgQVVfUFJFSU5TVAkicHJlaW5zdC5pbWciCi0jZGVmaW5lIEFVX0ZJUk1XQVJFCSJmaXJtd18wMS5pbWciCi0jZGVmaW5lIEFVX0tFUk5FTAkia2VybmxfMDEuaW1nIgotI2RlZmluZSBBVV9BUFAJCSJhcHAuaW1nIgotI2RlZmluZSBBVV9ESVNLCQkiZGlzay5pbWciCi0jZGVmaW5lIEFVX1BPU1RJTlNUCSJwb3N0aW5zdC5pbWciCi0KLXN0cnVjdCBmbGFzaF9sYXlvdXQKLXsKLQlsb25nIHN0YXJ0OwotCWxvbmcgZW5kOwotfTsKLQotLyogbGF5b3V0IG9mIHRoZSBGTEFTSC4gU1QgPSBzdGFydCBhZGRyZXNzLCBORCA9IGVuZCBhZGRyZXNzLiAqLwotI2lmbmRlZiBDT05GSUdfRkxBU0hfOE1CCQkJLyogMTYgTUIgRmxhc2gsIDMyIE1CIFJBTSAqLwotI2RlZmluZSBBVV9GTF9GSVJNV0FSRV9TVAkweDAwMDAwMDAwCi0jZGVmaW5lIEFVX0ZMX0ZJUk1XQVJFX05ECTB4MDAwOUZGRkYKLSNkZWZpbmUgQVVfRkxfVkZEX1NUCQkweDAwMEEwMDAwCi0jZGVmaW5lIEFVX0ZMX1ZGRF9ORAkJMHgwMDBCRkZGRgotI2RlZmluZSBBVV9GTF9LRVJORUxfU1QJCTB4MDAwQzAwMDAKLSNkZWZpbmUgQVVfRkxfS0VSTkVMX05ECQkweDAwMUJGRkZGCi0jZGVmaW5lIEFVX0ZMX0FQUF9TVAkJMHgwMDFDMDAwMAotI2RlZmluZSBBVV9GTF9BUFBfTkQJCTB4MDA1QkZGRkYKLSNkZWZpbmUgQVVfRkxfRElTS19TVAkJMHgwMDVDMDAwMAotI2RlZmluZSBBVV9GTF9ESVNLX05ECQkweDAwRkZGRkZGCi0jZWxzZQkJCQkJCS8qICA4IE1CIEZsYXNoLCAzMiBNQiBSQU0gKi8KLSNkZWZpbmUgQVVfRkxfRklSTVdBUkVfU1QJMHgwMDAwMDAwMAotI2RlZmluZSBBVV9GTF9GSVJNV0FSRV9ORAkweDAwMDVGRkZGCi0jZGVmaW5lIEFVX0ZMX0tFUk5FTF9TVAkJMHgwMDA2MDAwMAotI2RlZmluZSBBVV9GTF9LRVJORUxfTkQJCTB4MDAxM0ZGRkYKLSNkZWZpbmUgQVVfRkxfQVBQX1NUCQkweDAwMTQwMDAwCi0jZGVmaW5lIEFVX0ZMX0FQUF9ORAkJMHgwMDY3RkZGRgotI2RlZmluZSBBVV9GTF9ESVNLX1NUCQkweDAwNjgwMDAwCi0jZGVmaW5lIEFVX0ZMX0RJU0tfTkQJCTB4MDA3REZGRkYKLSNkZWZpbmUgQVVfRkxfVkZEX1NUCQkweDAwN0UwMDAwCi0jZGVmaW5lIEFVX0ZMX1ZGRF9ORAkJMHgwMDdGRkZGRgotI2VuZGlmCS8qIENPTkZJR19GTEFTSF84TUIgKi8KLQotLyogYSBzdHJ1Y3R1cmUgd2l0aCB0aGUgb2Zmc2V0cyB0byB2YWx1ZXMgaW4gdGhlIEVFUFJPTSAqLwotc3RydWN0IGVlcHJvbV9sYXlvdXQKLXsKLQlpbnQgdGltZTsKLQlpbnQgc2l6ZTsKLQlpbnQgZGNyYzsKLX07Ci0KLS8qIGxheW91dCBvZiB0aGUgRUVQUk9NIC0gb2Zmc2V0IGZyb20gdGhlIHN0YXJ0LiBBbGwgZW50cmllcyBhcmUgMzIgYml0LiAqLwotI2RlZmluZSBBVV9FRVBST01fVElNRV9QUkVJTlNUCTY0Ci0jZGVmaW5lIEFVX0VFUFJPTV9TSVpFX1BSRUlOU1QJNjgKLSNkZWZpbmUgQVVfRUVQUk9NX0RDUkNfUFJFSU5TVAk3MgotI2RlZmluZSBBVV9FRVBST01fVElNRV9GSVJNV0FSRQk3NgotI2RlZmluZSBBVV9FRVBST01fU0laRV9GSVJNV0FSRQk4MAotI2RlZmluZSBBVV9FRVBST01fRENSQ19GSVJNV0FSRQk4NAotI2RlZmluZSBBVV9FRVBST01fVElNRV9LRVJORUwJODgKLSNkZWZpbmUgQVVfRUVQUk9NX1NJWkVfS0VSTkVMCTkyCi0jZGVmaW5lIEFVX0VFUFJPTV9EQ1JDX0tFUk5FTAk5NgotI2RlZmluZSBBVV9FRVBST01fVElNRV9BUFAJMTAwCi0jZGVmaW5lIEFVX0VFUFJPTV9TSVpFX0FQUAkxMDQKLSNkZWZpbmUgQVVfRUVQUk9NX0RDUkNfQVBQCTEwOAotI2RlZmluZSBBVV9FRVBST01fVElNRV9ESVNLCTExMgotI2RlZmluZSBBVV9FRVBST01fU0laRV9ESVNLCTExNgotI2RlZmluZSBBVV9FRVBST01fRENSQ19ESVNLCTEyMAotI2RlZmluZSBBVV9FRVBST01fVElNRV9QT1NUSU5TVCAxMjQKLSNkZWZpbmUgQVVfRUVQUk9NX1NJWkVfUE9TVElOU1QgMTI4Ci0jZGVmaW5lIEFVX0VFUFJPTV9EQ1JDX1BPU1RJTlNUIDEzMgotCi1zdGF0aWMgaW50IGF1X3VzYl9zdG9yX2N1cnJfZGV2OyAvKiBjdXJyZW50IGRldmljZSAqLwotCi0vKiBpbmRleCBvZiBlYWNoIGZpbGUgaW4gdGhlIGZvbGxvd2luZyBhcnJheXMgKi8KLSNkZWZpbmUgSURYX1BSRVBBUkUJMAotI2RlZmluZSBJRFhfUFJFSU5TVAkxCi0jZGVmaW5lIElEWF9GSVJNV0FSRQkyCi0jZGVmaW5lIElEWF9LRVJORUwJMwotI2RlZmluZSBJRFhfQVBQCQk0Ci0jZGVmaW5lIElEWF9ESVNLCTUKLSNkZWZpbmUgSURYX1BPU1RJTlNUCTYKLS8qIG1heC4gbnVtYmVyIG9mIGZpbGVzIHdoaWNoIGNvdWxkIGludGVyZXN0IHVzICovCi0jZGVmaW5lIEFVX01BWEZJTEVTIDcKLS8qIHBvaW50ZXJzIHRvIGZpbGUgbmFtZXMgKi8KLWNoYXIgKmF1ZmlsZVtBVV9NQVhGSUxFU107Ci0vKiBzaXplcyBvZiBmbGFzaCBhcmVhcyBmb3IgZWFjaCBmaWxlICovCi1sb25nIGF1c2l6ZVtBVV9NQVhGSUxFU107Ci0vKiBvZmZzZXRzIGludG8gdGhlIEVFRVBST00gKi8KLXN0cnVjdCBlZXByb21fbGF5b3V0IGF1ZWVfb2ZmW0FVX01BWEZJTEVTXSA9IHsgXAotCXswfSwgXAotCXtBVV9FRVBST01fVElNRV9QUkVJTlNULCBBVV9FRVBST01fU0laRV9QUkVJTlNULCBBVV9FRVBST01fRENSQ19QUkVJTlNULH0sIFwKLQl7QVVfRUVQUk9NX1RJTUVfRklSTVdBUkUsIEFVX0VFUFJPTV9TSVpFX0ZJUk1XQVJFLCBBVV9FRVBST01fRENSQ19GSVJNV0FSRSx9LCBcCi0Je0FVX0VFUFJPTV9USU1FX0tFUk5FTCwgQVVfRUVQUk9NX1NJWkVfS0VSTkVMLCBBVV9FRVBST01fRENSQ19LRVJORUwsfSwgXAotCXtBVV9FRVBST01fVElNRV9BUFAsIEFVX0VFUFJPTV9TSVpFX0FQUCwgQVVfRUVQUk9NX0RDUkNfQVBQLH0sIFwKLQl7QVVfRUVQUk9NX1RJTUVfRElTSywgQVVfRUVQUk9NX1NJWkVfRElTSywgQVVfRUVQUk9NX0RDUkNfRElTSyx9LCBcCi0Je0FVX0VFUFJPTV9USU1FX1BPU1RJTlNULCBBVV9FRVBST01fU0laRV9QT1NUSU5TVCwgQVVfRUVQUk9NX0RDUkNfUE9TVElOU1QsfSBcCi0JfTsKLS8qIGFycmF5IG9mIGZsYXNoIGFyZWFzIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzICovCi1zdHJ1Y3QgZmxhc2hfbGF5b3V0IGF1ZmxfbGF5b3V0W0FVX01BWEZJTEVTIC0gM10gPSB7IFwKLQl7QVVfRkxfRklSTVdBUkVfU1QsIEFVX0ZMX0ZJUk1XQVJFX05ELH0sIFwKLQl7QVVfRkxfS0VSTkVMX1NULCBBVV9GTF9LRVJORUxfTkQsfSwgXAotCXtBVV9GTF9BUFBfU1QsIEFVX0ZMX0FQUF9ORCx9LCBcCi0Je0FVX0ZMX0RJU0tfU1QsIEFVX0ZMX0RJU0tfTkQsfSwgXAotfTsKLS8qIGNvbnZlcnQgdGhlIGluZGV4IGludG8gYXVmaWxlW10gdG8gYW4gaW5kZXggaW50byBhdWZsX2xheW91dFtdICovCi0jZGVmaW5lIEZJRFhfVE9fTElEWChpZHgpICgoaWR4KSAtIDIpCi0KLS8qIHdoZXJlIHRvIGxvYWQgZmlsZXMgaW50byBtZW1vcnkgKi8KLSNkZWZpbmUgTE9BRF9BRERSICgodW5zaWduZWQgY2hhciAqKTB4MEMxMDAwMDApCi0vKiB0aGUgYXBwIGlzIHRoZSBsYXJnZXN0IGltYWdlICovCi0jZGVmaW5lIE1BWF9MT0FEU1ogYXVzaXplW0lEWF9BUFBdCi0KLS8qIGV4dGVybmFscyAqLwotZXh0ZXJuIGludCBmYXRfcmVnaXN0ZXJfZGV2aWNlKGJsb2NrX2Rldl9kZXNjX3QgKiwgaW50KTsKLWV4dGVybiBpbnQgZmlsZV9mYXRfZGV0ZWN0ZnModm9pZCk7Ci1leHRlcm4gbG9uZyBmaWxlX2ZhdF9yZWFkKGNvbnN0IGNoYXIgKiwgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiBpbnQgaTJjX3JlYWQgKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGludCwgaW50ICwgdW5zaWduZWQgY2hhciogLCBpbnQpOwotZXh0ZXJuIGludCBpMmNfd3JpdGUgKHVjaGFyLCB1aW50LCBpbnQgLCB1Y2hhciogLCBpbnQpOwotI2lmZGVmIENPTkZJR19WRkQKLWV4dGVybiBpbnQgdHJhYl92ZmQgKHVsb25nKTsKLWV4dGVybiBpbnQgdHJhbnNmZXJfcGljKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQpOwotI2VuZGlmCi1leHRlcm4gaW50IGZsYXNoX3NlY3RfZXJhc2UodWxvbmcsIHVsb25nKTsKLWV4dGVybiBpbnQgZmxhc2hfc2VjdF9wcm90ZWN0IChpbnQsIHVsb25nLCB1bG9uZyk7Ci1leHRlcm4gaW50IGZsYXNoX3dyaXRlIChjaGFyICosIHVsb25nLCB1bG9uZyk7Ci0vKiBjaGFuZ2UgY2hhciogdG8gdm9pZCogdG8gc2h1dHVwIHRoZSBjb21waWxlciAqLwotZXh0ZXJuIGludCBpMmNfd3JpdGVfbXVsdGlwbGUgKHVjaGFyLCB1aW50LCBpbnQsIHZvaWQgKiwgaW50KTsKLWV4dGVybiBpbnQgaTJjX3JlYWRfbXVsdGlwbGUgKHVjaGFyLCB1aW50LCBpbnQsIHZvaWQgKiwgaW50KTsKLWV4dGVybiBpbnQgdV9ib290X2h1c2hfc3RhcnQodm9pZCk7Ci0KLWludAotYXVfY2hlY2tfY2tzdW1fdmFsaWQoaW50IGlkeCwgbG9uZyBuYnl0ZXMpCi17Ci0JaW1hZ2VfaGVhZGVyX3QgKmhkcjsKLQotCWhkciA9IChpbWFnZV9oZWFkZXJfdCAqKUxPQURfQUREUjsKLSNpZiBkZWZpbmVkKENPTkZJR19GSVQpCi0JaWYgKGdlbmltZ19nZXRfZm9ybWF0ICgodm9pZCAqKWhkcikgIT0gSU1BR0VfRk9STUFUX0xFR0FDWSkgewotCQlwdXRzICgiTm9uIGxlZ2FjeSBpbWFnZSBmb3JtYXQgbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0jZW5kaWYKLQotCWlmIChuYnl0ZXMgIT0gaW1hZ2VfZ2V0X2ltYWdlX3NpemUgKGhkcikpIHsKLQkJcHJpbnRmICgiSW1hZ2UgJXMgYmFkIHRvdGFsIFNJWkVcbiIsIGF1ZmlsZVtpZHhdKTsKLQkJcmV0dXJuIC0xOwotCX0KLQkvKiBjaGVjayB0aGUgZGF0YSBDUkMgKi8KLQlpZiAoIWltYWdlX2NoZWNrX2RjcmMgKGhkcikpIHsKLQkJcHJpbnRmICgiSW1hZ2UgJXMgYmFkIGRhdGEgY2hlY2tzdW1cbiIsIGF1ZmlsZVtpZHhdKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1hdV9jaGVja19oZWFkZXJfdmFsaWQoaW50IGlkeCwgbG9uZyBuYnl0ZXMpCi17Ci0JaW1hZ2VfaGVhZGVyX3QgKmhkcjsKLQl1bnNpZ25lZCBsb25nIGNoZWNrc3VtOwotCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwotCi0JaGRyID0gKGltYWdlX2hlYWRlcl90ICopTE9BRF9BRERSOwotI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkKLQlpZiAoZ2VuaW1nX2dldF9mb3JtYXQgKCh2b2lkICopaGRyKSAhPSBJTUFHRV9GT1JNQVRfTEVHQUNZKSB7Ci0JCXB1dHMgKCJOb24gbGVnYWN5IGltYWdlIGZvcm1hdCBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLSNlbmRpZgotCi0JLyogY2hlY2sgdGhlIGVhc3kgb25lcyBmaXJzdCAqLwotI3VuZGVmIENIRUNLX1ZBTElEX0RFQlVHCi0jaWZkZWYgQ0hFQ0tfVkFMSURfREVCVUcKLQlwcmludGYoIm1hZ2ljICUjeCAlI3ggIiwgaW1hZ2VfZ2V0X21hZ2ljIChoZHIpLCBJSF9NQUdJQyk7Ci0JcHJpbnRmKCJhcmNoICUjeCAlI3ggIiwgaW1hZ2VfZ2V0X2FyY2ggKGhkciksIElIX0FSQ0hfQVJNKTsKLQlwcmludGYoInNpemUgJSN4ICUjbHggIiwgaW1hZ2VfZ2V0X2RhdGFfc2l6ZSAoaGRyKSwgbmJ5dGVzKTsKLQlwcmludGYoInR5cGUgJSN4ICUjeCAiLCBpbWFnZV9nZXRfdHlwZSAoaGRyKSwgSUhfVFlQRV9LRVJORUwpOwotI2VuZGlmCi0JaWYgKG5ieXRlcyA8IGltYWdlX2dldF9oZWFkZXJfc2l6ZSAoKSkgewotCQlwcmludGYgKCJJbWFnZSAlcyBiYWQgaGVhZGVyIFNJWkVcbiIsIGF1ZmlsZVtpZHhdKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoIWltYWdlX2NoZWNrX21hZ2ljIChoZHIpIHx8ICFpbWFnZV9jaGVja19hcmNoIChoZHIsIElIX0FSQ0hfQVJNKSkgewotCQlwcmludGYgKCJJbWFnZSAlcyBiYWQgTUFHSUMgb3IgQVJDSFxuIiwgYXVmaWxlW2lkeF0pOwotCQlyZXR1cm4gLTE7Ci0JfQotCS8qIGNoZWNrIHRoZSBoZHIgQ1JDICovCi0JaWYgKCFpbWFnZV9jaGVja19oY3JjIChoZHIpKSB7Ci0JCXByaW50ZiAoIkltYWdlICVzIGJhZCBoZWFkZXIgY2hlY2tzdW1cbiIsIGF1ZmlsZVtpZHhdKTsKLQkJcmV0dXJuIC0xOwotCX0KLQkvKiBjaGVjayB0aGUgdHlwZSAtIGNvdWxkIGRvIHRoaXMgYWxsIGluIG9uZSBnaWdhbnRpYyBpZigpICovCi0JaWYgKChpZHggPT0gSURYX0ZJUk1XQVJFKSAmJgotCQkhaW1hZ2VfY2hlY2tfdHlwZSAoaGRyLCBJSF9UWVBFX0ZJUk1XQVJFKSkgewotCQlwcmludGYgKCJJbWFnZSAlcyB3cm9uZyB0eXBlXG4iLCBhdWZpbGVbaWR4XSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKChpZHggPT0gSURYX0tFUk5FTCkgJiYgIWltYWdlX2NoZWNrX3R5cGUgKGhkciwgSUhfVFlQRV9LRVJORUwpKSB7Ci0JCXByaW50ZiAoIkltYWdlICVzIHdyb25nIHR5cGVcbiIsIGF1ZmlsZVtpZHhdKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoKGlkeCA9PSBJRFhfRElTSykgJiYgIWltYWdlX2NoZWNrX3R5cGUgKGhkciwgSUhfVFlQRV9GSUxFU1lTVEVNKSkgewotCQlwcmludGYgKCJJbWFnZSAlcyB3cm9uZyB0eXBlXG4iLCBhdWZpbGVbaWR4XSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKChpZHggPT0gSURYX0FQUCkgJiYgIWltYWdlX2NoZWNrX3R5cGUgKGhkciwgSUhfVFlQRV9SQU1ESVNLKQotCQkmJiAhaW1hZ2VfY2hlY2tfdHlwZSAoaGRyLCBJSF9UWVBFX0ZJTEVTWVNURU0pKSB7Ci0JCXByaW50ZiAoIkltYWdlICVzIHdyb25nIHR5cGVcbiIsIGF1ZmlsZVtpZHhdKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoKGlkeCA9PSBJRFhfUFJFUEFSRSB8fCBpZHggPT0gSURYX1BSRUlOU1QgfHwgaWR4ID09IElEWF9QT1NUSU5TVCkKLQkJJiYgIWltYWdlX2NoZWNrX3R5cGUgKGhkciwgSUhfVFlQRV9TQ1JJUFQpKSB7Ci0JCXByaW50ZiAoIkltYWdlICVzIHdyb25nIHR5cGVcbiIsIGF1ZmlsZVtpZHhdKTsKLQkJcmV0dXJuIC0xOwotCX0KLQkvKiBzcGVjaWFsIGNhc2UgZm9yIHByZXBhcmUuaW1nICovCi0JaWYgKGlkeCA9PSBJRFhfUFJFUEFSRSkKLQkJcmV0dXJuIDA7Ci0JLyogcmVjeWNsZSBjaGVja3N1bSAqLwotCWNoZWNrc3VtID0gaW1hZ2VfZ2V0X2RhdGFfc2l6ZSAoaGRyKTsKLQkvKiBmb3Iga2VybmVsIGFuZCBhcHAgdGhlIGltYWdlIGhlYWRlciBtdXN0IGFsc28gZml0IGludG8gZmxhc2ggKi8KLQlpZiAoKGlkeCAhPSBJRFhfRElTSykgJiYgKGlkeCAhPSBJRFhfRklSTVdBUkUpKQotCQljaGVja3N1bSArPSBpbWFnZV9nZXRfaGVhZGVyX3NpemUgKCk7Ci0JLyogY2hlY2sgdGhlIHNpemUgZG9lcyBub3QgZXhjZWVkIHNwYWNlIGluIGZsYXNoLiBIVVNIIHNjcmlwdHMgKi8KLQkvKiBhbGwgaGF2ZSBhdXNpemVbXSBzZXQgdG8gMCAqLwotCWlmICgoYXVzaXplW2lkeF0gIT0gMCkgJiYgKGF1c2l6ZVtpZHhdIDwgY2hlY2tzdW0pKSB7Ci0JCXByaW50ZiAoIkltYWdlICVzIGlzIGJpZ2dlciB0aGFuIEZMQVNIXG4iLCBhdWZpbGVbaWR4XSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JLyogY2hlY2sgdGhlIHRpbWUgc3RhbXAgZnJvbSB0aGUgRUVQUk9NICovCi0JLyogcmVhZCBpdCBpbiAqLwotCWkyY19yZWFkX211bHRpcGxlKDB4NTQsIGF1ZWVfb2ZmW2lkeF0udGltZSwgMSwgYnVmLCBzaXplb2YoYnVmKSk7Ci0jaWZkZWYgQ0hFQ0tfVkFMSURfREVCVUcKLQlwcmludGYgKCJidWZbMF0gJSN4IGJ1ZlsxXSAlI3ggYnVmWzJdICUjeCBidWZbM10gJSN4ICIKLQkJImFzIGludCAlI3ggdGltZSAlI3hcbiIsCi0JCWJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwKLQkJKigodW5zaWduZWQgaW50ICopYnVmKSwgaW1hZ2VfZ2V0X3RpbWUgKGhkcikpOwotI2VuZGlmCi0JLyogY2hlY2sgaXQgKi8KLQlpZiAoKigodW5zaWduZWQgaW50ICopYnVmKSA+PSBpbWFnZV9nZXRfdGltZSAoaGRyKSkgewotCQlwcmludGYgKCJJbWFnZSAlcyBpcyB0b28gb2xkXG4iLCBhdWZpbGVbaWR4XSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogcG93ZXIgY29udHJvbCBkZWZpbmVzICovCi0jZGVmaW5lIENQTERfVkZEX0JLICgodm9sYXRpbGUgY2hhciAqKTB4MDQwMzgwMDIpCi0jZGVmaW5lIFBPV0VSX09GRiAoMSA8PCAxKQotCi1pbnQKLWF1X2RvX3VwZGF0ZShpbnQgaWR4LCBsb25nIHN6KQotewotCWltYWdlX2hlYWRlcl90ICpoZHI7Ci0JY2hhciAqYWRkcjsKLQlsb25nIHN0YXJ0LCBlbmQ7Ci0JaW50IG9mZiwgcmM7Ci0JdWludCBuYnl0ZXM7Ci0KLQloZHIgPSAoaW1hZ2VfaGVhZGVyX3QgKilMT0FEX0FERFI7Ci0jaWYgZGVmaW5lZChDT05GSUdfRklUKQotCWlmIChnZW5pbWdfZ2V0X2Zvcm1hdCAoKHZvaWQgKiloZHIpICE9IElNQUdFX0ZPUk1BVF9MRUdBQ1kpIHsKLQkJcHV0cyAoIk5vbiBsZWdhY3kgaW1hZ2UgZm9ybWF0IG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotI2VuZGlmCi0KLQkvKiBkaXNhYmxlIHRoZSBwb3dlciBzd2l0Y2ggKi8KLQkqQ1BMRF9WRkRfQksgfD0gUE9XRVJfT0ZGOwotCi0JLyogZXhlY3V0ZSBhIHNjcmlwdCAqLwotCWlmIChpbWFnZV9jaGVja190eXBlIChoZHIsIElIX1RZUEVfU0NSSVBUKSkgewotCQlhZGRyID0gKGNoYXIgKikoKGNoYXIgKiloZHIgKyBpbWFnZV9nZXRfaGVhZGVyX3NpemUgKCkpOwotCQkvKiBzdGljayBhIE5VTEwgYXQgdGhlIGVuZCBvZiB0aGUgc2NyaXB0LCBvdGhlcndpc2UgKi8KLQkJLyogcGFyc2Vfc3RyaW5nX291dGVyKCkgcnVucyBvZmYgdGhlIGVuZC4gKi8KLQkJYWRkcltpbWFnZV9nZXRfZGF0YV9zaXplIChoZHIpXSA9IDA7Ci0JCWFkZHIgKz0gODsKLQkJcGFyc2Vfc3RyaW5nX291dGVyKGFkZHIsIEZMQUdfUEFSU0VfU0VNSUNPTE9OKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3RhcnQgPSBhdWZsX2xheW91dFtGSURYX1RPX0xJRFgoaWR4KV0uc3RhcnQ7Ci0JZW5kID0gYXVmbF9sYXlvdXRbRklEWF9UT19MSURYKGlkeCldLmVuZDsKLQotCS8qIHVucHJvdGVjdCB0aGUgYWRkcmVzcyByYW5nZSAqLwotCS8qIHRoaXMgYXNzdW1lcyB0aGF0IE9OTFkgdGhlIGZpcm13YXJlIGlzIHByb3RlY3RlZCEgKi8KLQlpZiAoaWR4ID09IElEWF9GSVJNV0FSRSkgewotI3VuZGVmIEFVX1VQREFURV9URVNUCi0jaWZkZWYgQVVfVVBEQVRFX1RFU1QKLQkJLyogZXJhc2UgaXQgd2hlcmUgTGludXggZ29lcyAqLwotCQlzdGFydCA9IGF1ZmxfbGF5b3V0WzFdLnN0YXJ0OwotCQllbmQgPSBhdWZsX2xheW91dFsxXS5lbmQ7Ci0jZW5kaWYKLQkJZmxhc2hfc2VjdF9wcm90ZWN0KDAsIHN0YXJ0LCBlbmQpOwotCX0KLQotCS8qCi0JICogZXJhc2UgdGhlIGFkZHJlc3MgcmFuZ2UuCi0JICovCi0JZGVidWcgKCJmbGFzaF9zZWN0X2VyYXNlKCVseCwgJWx4KTtcbiIsIHN0YXJ0LCBlbmQpOwotCWZsYXNoX3NlY3RfZXJhc2Uoc3RhcnQsIGVuZCk7Ci0Jd2FpdF9tcygxMDApOwotCS8qIHN0cmlwIHRoZSBoZWFkZXIgLSBleGNlcHQgZm9yIHRoZSBrZXJuZWwgYW5kIHJhbWRpc2sgKi8KLQlpZiAoaW1hZ2VfY2hlY2tfdHlwZSAoaGRyLCBJSF9UWVBFX0tFUk5FTCkgfHwKLQkJCWltYWdlX2NoZWNrX3R5cGUgKGhkciwgSUhfVFlQRV9SQU1ESVNLKSkgewotCQlhZGRyID0gKGNoYXIgKiloZHI7Ci0JCW9mZiA9IGltYWdlX2dldF9oZWFkZXJfc2l6ZSAoKTsKLQkJbmJ5dGVzID0gaW1hZ2VfZ2V0X2ltYWdlX3NpemUgKGhkcik7Ci0JfSBlbHNlIHsKLQkJYWRkciA9IChjaGFyICopKChjaGFyICopaGRyICsgaW1hZ2VfZ2V0X2hlYWRlcl9zaXplICgpKTsKLSNpZmRlZiBBVV9VUERBVEVfVEVTVAotCQkvKiBjb3B5IGl0IHRvIHdoZXJlIExpbnV4IGdvZXMgKi8KLQkJaWYgKGlkeCA9PSBJRFhfRklSTVdBUkUpCi0JCQlzdGFydCA9IGF1ZmxfbGF5b3V0WzFdLnN0YXJ0OwotI2VuZGlmCi0JCW9mZiA9IDA7Ci0JCW5ieXRlcyA9IGltYWdlX2dldF9kYXRhX3NpemUgKGhkcik7Ci0JfQotCi0JLyogY29weSB0aGUgZGF0YSBmcm9tIFJBTSB0byBGTEFTSCAqLwotCWRlYnVnICgiZmxhc2hfd3JpdGUoJXAsICVseCAleClcbiIsIGFkZHIsIHN0YXJ0LCBuYnl0ZXMpOwotCXJjID0gZmxhc2hfd3JpdGUoYWRkciwgc3RhcnQsIG5ieXRlcyk7Ci0JaWYgKHJjICE9IDApIHsKLQkJcHJpbnRmKCJGbGFzaGluZyBmYWlsZWQgZHVlIHRvIGVycm9yICVkXG4iLCByYyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBjaGVjayB0aGUgZGNyYyBvZiB0aGUgY29weSAqLwotCWlmIChjcmMzMiAoMCwgKHVjaGFyICopKHN0YXJ0ICsgb2ZmKSwgaW1hZ2VfZ2V0X2RhdGFfc2l6ZSAoaGRyKSkgIT0KLQkgICAgaW1hZ2VfZ2V0X2RjcmMgKGhkcikpIHsKLQkJcHJpbnRmICgiSW1hZ2UgJXMgQmFkIERhdGEgQ2hlY2tzdW0gQWZ0ZXIgQ09QWVxuIiwgYXVmaWxlW2lkeF0pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogcHJvdGVjdCB0aGUgYWRkcmVzcyByYW5nZSAqLwotCS8qIHRoaXMgYXNzdW1lcyB0aGF0IE9OTFkgdGhlIGZpcm13YXJlIGlzIHByb3RlY3RlZCEgKi8KLQlpZiAoaWR4ID09IElEWF9GSVJNV0FSRSkKLQkJZmxhc2hfc2VjdF9wcm90ZWN0KDEsIHN0YXJ0LCBlbmQpOwotCXJldHVybiAwOwotfQotCi1pbnQKLWF1X3VwZGF0ZV9lZXByb20oaW50IGlkeCkKLXsKLQlpbWFnZV9oZWFkZXJfdCAqaGRyOwotCWludCBvZmY7Ci0JdWludDMyX3QgdmFsOwotCi0JLyogc3BlY2lhbCBjYXNlIGZvciBwcmVwYXJlLmltZyAqLwotCWlmIChpZHggPT0gSURYX1BSRVBBUkUpIHsKLQkJLyogZW5hYmxlIHRoZSBwb3dlciBzd2l0Y2ggKi8KLQkJKkNQTERfVkZEX0JLICY9IH5QT1dFUl9PRkY7Ci0JCXJldHVybiAwOwotCX0KLQotCWhkciA9IChpbWFnZV9oZWFkZXJfdCAqKUxPQURfQUREUjsKLSNpZiBkZWZpbmVkKENPTkZJR19GSVQpCi0JaWYgKGdlbmltZ19nZXRfZm9ybWF0ICgodm9pZCAqKWhkcikgIT0gSU1BR0VfRk9STUFUX0xFR0FDWSkgewotCQlwdXRzICgiTm9uIGxlZ2FjeSBpbWFnZSBmb3JtYXQgbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0jZW5kaWYKLQotCS8qIHdyaXRlIHRoZSB0aW1lIGZpZWxkIGludG8gRUVQUk9NICovCi0Jb2ZmID0gYXVlZV9vZmZbaWR4XS50aW1lOwotCXZhbCA9IGltYWdlX2dldF90aW1lIChoZHIpOwotCWkyY193cml0ZV9tdWx0aXBsZSgweDU0LCBvZmYsIDEsICZ2YWwsIHNpemVvZih2YWwpKTsKLQkvKiB3cml0ZSB0aGUgc2l6ZSBmaWVsZCBpbnRvIEVFUFJPTSAqLwotCW9mZiA9IGF1ZWVfb2ZmW2lkeF0uc2l6ZTsKLQl2YWwgPSBpbWFnZV9nZXRfZGF0YV9zaXplIChoZHIpOwotCWkyY193cml0ZV9tdWx0aXBsZSgweDU0LCBvZmYsIDEsICZ2YWwsIHNpemVvZih2YWwpKTsKLQkvKiB3cml0ZSB0aGUgZGNyYyBmaWVsZCBpbnRvIEVFUFJPTSAqLwotCW9mZiA9IGF1ZWVfb2ZmW2lkeF0uZGNyYzsKLQl2YWwgPSBpbWFnZV9nZXRfZGNyYyAoaGRyKTsKLQlpMmNfd3JpdGVfbXVsdGlwbGUoMHg1NCwgb2ZmLCAxLCAmdmFsLCBzaXplb2YodmFsKSk7Ci0JLyogZW5hYmxlIHRoZSBwb3dlciBzd2l0Y2ggKi8KLQkqQ1BMRF9WRkRfQksgJj0gflBPV0VSX09GRjsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIHRoaXMgaXMgY2FsbGVkIGZyb20gYm9hcmRfaW5pdCgpIGFmdGVyIHRoZSBoYXJkd2FyZSBoYXMgYmVlbiBzZXQgdXAKLSAqIGFuZCBpcyB1c2FibGUuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgdGltZSB0byBkbyB0aGlzLgotICogUmlnaHQgbm93IHRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KLSAqLwotaW50Ci1kb19hdXRvX3VwZGF0ZSh2b2lkKQotewotCWJsb2NrX2Rldl9kZXNjX3QgKnN0b3JfZGV2OwotCWxvbmcgc3o7Ci0JaW50IGksIHJlcyA9IDAsIGJpdG1hcF9maXJzdCwgY250LCBvbGRfY3RybGMsIGdvdF9jdHJsYzsKLQljaGFyICplbnY7Ci0JbG9uZyBzdGFydCwgZW5kOwotCi0jdW5kZWYgRVJBU0VfRUVQUk9NCi0jaWZkZWYgRVJBU0VfRUVQUk9NCi0JaW50IGFyclsxOF07Ci0JbWVtc2V0KGFyciwgMCwgc2l6ZW9mKGFycikpOwotCWkyY193cml0ZV9tdWx0aXBsZSgweDU0LCA2NCwgMSwgYXJyLCBzaXplb2YoYXJyKSk7Ci0jZW5kaWYKLQlhdV91c2Jfc3Rvcl9jdXJyX2RldiA9IC0xOwotCS8qIHN0YXJ0IFVTQiAqLwotCWlmICh1c2Jfc3RvcCgpIDwgMCkgewotCQlkZWJ1ZyAoInVzYl9zdG9wIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKHVzYl9pbml0KCkgPCAwKSB7Ci0JCWRlYnVnICgidXNiX2luaXQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQkvKgotCSAqIGNoZWNrIHdoZXRoZXIgYSBzdG9yYWdlIGRldmljZSBpcyBhdHRhY2hlZCAoYXNzdW1lIHRoYXQgaXQncwotCSAqIGEgVVNCIG1lbW9yeSBzdGljaywgc2luY2Ugbm90aGluZyBlbHNlIHNob3VsZCBiZSBhdHRhY2hlZCkuCi0JICovCi0JYXVfdXNiX3N0b3JfY3Vycl9kZXYgPSB1c2Jfc3Rvcl9zY2FuKDApOwotCWlmIChhdV91c2Jfc3Rvcl9jdXJyX2RldiA9PSAtMSkgewotCQlkZWJ1ZyAoIk5vIGRldmljZSBmb3VuZC4gTm90IGluaXRpYWxpemVkP1xuIik7Ci0JCXJlcyA9IC0xOwotCQlnb3RvIHhpdDsKLQl9Ci0JLyogY2hlY2sgd2hldGhlciBpdCBoYXMgYSBwYXJ0aXRpb24gdGFibGUgKi8KLQlzdG9yX2RldiA9IGdldF9kZXYoInVzYiIsIDApOwotCWlmIChzdG9yX2RldiA9PSBOVUxMKSB7Ci0JCWRlYnVnICgidWtub3duIGRldmljZSB0eXBlXG4iKTsKLQkJcmVzID0gLTE7Ci0JCWdvdG8geGl0OwotCX0KLQlpZiAoZmF0X3JlZ2lzdGVyX2RldmljZShzdG9yX2RldiwgMSkgIT0gMCkgewotCQlkZWJ1ZyAoIlVuYWJsZSB0byB1c2UgVVNCICVkOiVkIGZvciBmYXRsc1xuIiwKLQkJCWF1X3VzYl9zdG9yX2N1cnJfZGV2LCAxKTsKLQkJcmVzID0gLTE7Ci0JCWdvdG8geGl0OwotCX0KLQlpZiAoZmlsZV9mYXRfZGV0ZWN0ZnMoKSAhPSAwKSB7Ci0JCWRlYnVnICgiZmlsZV9mYXRfZGV0ZWN0ZnMgZmFpbGVkXG4iKTsKLQl9Ci0KLQkvKiBpbml0aWFsaXplIHRoZSBhcnJheSBvZiBmaWxlIG5hbWVzICovCi0JbWVtc2V0KGF1ZmlsZSwgMCwgc2l6ZW9mKGF1ZmlsZSkpOwotCWF1ZmlsZVtJRFhfUFJFUEFSRV0gPSBBVV9QUkVQQVJFOwotCWF1ZmlsZVtJRFhfUFJFSU5TVF0gPSBBVV9QUkVJTlNUOwotCWF1ZmlsZVtJRFhfRklSTVdBUkVdID0gQVVfRklSTVdBUkU7Ci0JYXVmaWxlW0lEWF9LRVJORUxdID0gQVVfS0VSTkVMOwotCWF1ZmlsZVtJRFhfQVBQXSA9IEFVX0FQUDsKLQlhdWZpbGVbSURYX0RJU0tdID0gQVVfRElTSzsKLQlhdWZpbGVbSURYX1BPU1RJTlNUXSA9IEFVX1BPU1RJTlNUOwotCS8qIGluaXRpYWxpemUgdGhlIGFycmF5IG9mIGZsYXNoIHNpemVzICovCi0JbWVtc2V0KGF1c2l6ZSwgMCwgc2l6ZW9mKGF1c2l6ZSkpOwotCWF1c2l6ZVtJRFhfRklSTVdBUkVdID0gKEFVX0ZMX0ZJUk1XQVJFX05EICsgMSkgLSBBVV9GTF9GSVJNV0FSRV9TVDsKLQlhdXNpemVbSURYX0tFUk5FTF0gPSAoQVVfRkxfS0VSTkVMX05EICsgMSkgLSBBVV9GTF9LRVJORUxfU1Q7Ci0JYXVzaXplW0lEWF9BUFBdID0gKEFVX0ZMX0FQUF9ORCArIDEpIC0gQVVfRkxfQVBQX1NUOwotCWF1c2l6ZVtJRFhfRElTS10gPSAoQVVfRkxfRElTS19ORCArIDEpIC0gQVVfRkxfRElTS19TVDsKLQkvKgotCSAqIG5vdyBjaGVjayB3aGV0aGVyIHN0YXJ0IGFuZCBlbmQgYXJlIGRlZmluZWQgdXNpbmcgZW52aXJvbm1lbnQKLQkgKiB2YXJpYWJsZXMuCi0JICovCi0Jc3RhcnQgPSAtMTsKLQllbmQgPSAwOwotCWVudiA9IGdldGVudigiZmlybXdhcmVfc3QiKTsKLQlpZiAoZW52ICE9IE5VTEwpCi0JCXN0YXJ0ID0gc2ltcGxlX3N0cnRvdWwoZW52LCBOVUxMLCAxNik7Ci0JZW52ID0gZ2V0ZW52KCJmaXJtd2FyZV9uZCIpOwotCWlmIChlbnYgIT0gTlVMTCkKLQkJZW5kID0gc2ltcGxlX3N0cnRvdWwoZW52LCBOVUxMLCAxNik7Ci0JaWYgKHN0YXJ0ID49IDAgJiYgZW5kICYmIGVuZCA+IHN0YXJ0KSB7Ci0JCWF1c2l6ZVtJRFhfRklSTVdBUkVdID0gKGVuZCArIDEpIC0gc3RhcnQ7Ci0JCWF1ZmxfbGF5b3V0WzBdLnN0YXJ0ID0gc3RhcnQ7Ci0JCWF1ZmxfbGF5b3V0WzBdLmVuZCA9IGVuZDsKLQl9Ci0Jc3RhcnQgPSAtMTsKLQllbmQgPSAwOwotCWVudiA9IGdldGVudigia2VybmVsX3N0Iik7Ci0JaWYgKGVudiAhPSBOVUxMKQotCQlzdGFydCA9IHNpbXBsZV9zdHJ0b3VsKGVudiwgTlVMTCwgMTYpOwotCWVudiA9IGdldGVudigia2VybmVsX25kIik7Ci0JaWYgKGVudiAhPSBOVUxMKQotCQllbmQgPSBzaW1wbGVfc3RydG91bChlbnYsIE5VTEwsIDE2KTsKLQlpZiAoc3RhcnQgPj0gMCAmJiBlbmQgJiYgZW5kID4gc3RhcnQpIHsKLQkJYXVzaXplW0lEWF9LRVJORUxdID0gKGVuZCArIDEpIC0gc3RhcnQ7Ci0JCWF1ZmxfbGF5b3V0WzFdLnN0YXJ0ID0gc3RhcnQ7Ci0JCWF1ZmxfbGF5b3V0WzFdLmVuZCA9IGVuZDsKLQl9Ci0Jc3RhcnQgPSAtMTsKLQllbmQgPSAwOwotCWVudiA9IGdldGVudigiYXBwX3N0Iik7Ci0JaWYgKGVudiAhPSBOVUxMKQotCQlzdGFydCA9IHNpbXBsZV9zdHJ0b3VsKGVudiwgTlVMTCwgMTYpOwotCWVudiA9IGdldGVudigiYXBwX25kIik7Ci0JaWYgKGVudiAhPSBOVUxMKQotCQllbmQgPSBzaW1wbGVfc3RydG91bChlbnYsIE5VTEwsIDE2KTsKLQlpZiAoc3RhcnQgPj0gMCAmJiBlbmQgJiYgZW5kID4gc3RhcnQpIHsKLQkJYXVzaXplW0lEWF9BUFBdID0gKGVuZCArIDEpIC0gc3RhcnQ7Ci0JCWF1ZmxfbGF5b3V0WzJdLnN0YXJ0ID0gc3RhcnQ7Ci0JCWF1ZmxfbGF5b3V0WzJdLmVuZCA9IGVuZDsKLQl9Ci0Jc3RhcnQgPSAtMTsKLQllbmQgPSAwOwotCWVudiA9IGdldGVudigiZGlza19zdCIpOwotCWlmIChlbnYgIT0gTlVMTCkKLQkJc3RhcnQgPSBzaW1wbGVfc3RydG91bChlbnYsIE5VTEwsIDE2KTsKLQllbnYgPSBnZXRlbnYoImRpc2tfbmQiKTsKLQlpZiAoZW52ICE9IE5VTEwpCi0JCWVuZCA9IHNpbXBsZV9zdHJ0b3VsKGVudiwgTlVMTCwgMTYpOwotCWlmIChzdGFydCA+PSAwICYmIGVuZCAmJiBlbmQgPiBzdGFydCkgewotCQlhdXNpemVbSURYX0RJU0tdID0gKGVuZCArIDEpIC0gc3RhcnQ7Ci0JCWF1ZmxfbGF5b3V0WzNdLnN0YXJ0ID0gc3RhcnQ7Ci0JCWF1ZmxfbGF5b3V0WzNdLmVuZCA9IGVuZDsKLQl9Ci0JLyogbWFrZSBjZXJ0YWluIHRoYXQgSFVTSCBpcyBydW5uYWJsZSAqLwotCXVfYm9vdF9odXNoX3N0YXJ0KCk7Ci0JLyogbWFrZSBzdXJlIHRoYXQgd2Ugc2VlIENUUkwtQyBhbmQgc2F2ZSB0aGUgb2xkIHN0YXRlICovCi0Jb2xkX2N0cmxjID0gZGlzYWJsZV9jdHJsYygwKTsKLQotCWJpdG1hcF9maXJzdCA9IDA7Ci0JLyoganVzdCBsb29wIHRocnUgYWxsIHRoZSBwb3NzaWJsZSBmaWxlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBVV9NQVhGSUxFUzsgaSsrKSB7Ci0JCS8qIGp1c3QgcmVhZCB0aGUgaGVhZGVyICovCi0JCXN6ID0gZmlsZV9mYXRfcmVhZChhdWZpbGVbaV0sIExPQURfQUREUiwgaW1hZ2VfZ2V0X2hlYWRlcl9zaXplICgpKTsKLQkJZGVidWcgKCJyZWFkICVzIHN6ICVsZCBoZHIgJWRcbiIsCi0JCQlhdWZpbGVbaV0sIHN6LCBpbWFnZV9nZXRfaGVhZGVyX3NpemUgKCkpOwotCQlpZiAoc3ogPD0gMCB8fCBzeiA8IGltYWdlX2dldF9oZWFkZXJfc2l6ZSAoKSkgewotCQkJZGVidWcgKCIlcyBub3QgZm91bmRcbiIsIGF1ZmlsZVtpXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoYXVfY2hlY2tfaGVhZGVyX3ZhbGlkKGksIHN6KSA8IDApIHsKLQkJCWRlYnVnICgiJXMgaGVhZGVyIG5vdCB2YWxpZFxuIiwgYXVmaWxlW2ldKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXN6ID0gZmlsZV9mYXRfcmVhZChhdWZpbGVbaV0sIExPQURfQUREUiwgTUFYX0xPQURTWik7Ci0JCWRlYnVnICgicmVhZCAlcyBzeiAlbGQgaGRyICVkXG4iLAotCQkJYXVmaWxlW2ldLCBzeiwgaW1hZ2VfZ2V0X2hlYWRlcl9zaXplICgpKTsKLQkJaWYgKHN6IDw9IDAgfHwgc3ogPD0gaW1hZ2VfZ2V0X2hlYWRlcl9zaXplICgpKSB7Ci0JCQlkZWJ1ZyAoIiVzIG5vdCBmb3VuZFxuIiwgYXVmaWxlW2ldKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChhdV9jaGVja19ja3N1bV92YWxpZChpLCBzeikgPCAwKSB7Ci0JCQlkZWJ1ZyAoIiVzIGNoZWNrc3VtIG5vdCB2YWxpZFxuIiwgYXVmaWxlW2ldKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jaWZkZWYgQ09ORklHX1ZGRAotCQkvKiBub3cgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgZmlsZSB3ZSBjYW4gZGlzcGxheSB0aGUgKi8KLQkJLyogYml0bWFwLiAqLwotCQlpZiAoYml0bWFwX2ZpcnN0ID09IDApIHsKLQkJCWVudiA9IGdldGVudigiYml0bWFwMiIpOwotCQkJaWYgKGVudiA9PSBOVUxMKSB7Ci0JCQkJdHJhYl92ZmQoMCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIG5vdCBzbyBzaW1wbGUgLSBiaXRtYXAyIGlzIHN1cHBvc2VkIHRvICovCi0JCQkJLyogY29udGFpbiB0aGUgYWRkcmVzcyBvZiB0aGUgYml0bWFwICovCi0JCQkJZW52ID0gKGNoYXIgKilzaW1wbGVfc3RydG91bChlbnYsIE5VTEwsIDE2KTsKLS8qIE5PVEU6IHRoZXNlIGFyZSB0YWtlbiBmcm9tIHZmZF9sb2dvLmguIElmIHRoYXQgZmlsZSBjaGFuZ2VzIHRoZW4gKi8KLS8qIHRoZXNlIGRlZmluZXMgTVVTVCBhbHNvIGJlIHVwZGF0ZWQhIFRoZXNlIG1heSBiZSB3cm9uZyBmb3IgYml0bWFwMi4gKi8KLSNkZWZpbmUgVkZEX0xPR09fV0lEVEggMTEyCi0jZGVmaW5lIFZGRF9MT0dPX0hFSUdIVCA3MgotCQkJCS8qIG11c3QgY2FsbCB0cmFuc2Zlcl9waWMgZGlyZWN0bHkgKi8KLQkJCQl0cmFuc2Zlcl9waWMoMywgKHVuc2lnbmVkIGNoYXIgKillbnYsCi0JCQkJCSAgICAgVkZEX0xPR09fSEVJR0hULCBWRkRfTE9HT19XSURUSCk7Ci0JCQl9Ci0JCQliaXRtYXBfZmlyc3QgPSAxOwotCQl9Ci0jZW5kaWYKLQkJLyogdGhpcyBpcyByZWFsbHkgbm90IGEgZ29vZCBpZGVhLCBidXQgaXQncyB3aGF0IHRoZSAqLwotCQkvKiBjdXN0b21lciB3YW50cy4gKi8KLQkJY250ID0gMDsKLQkJZ290X2N0cmxjID0gMDsKLQkJZG8gewotCQkJcmVzID0gYXVfZG9fdXBkYXRlKGksIHN6KTsKLQkJCS8qIGxldCB0aGUgdXNlciBicmVhayBvdXQgb2YgdGhlIGxvb3AgKi8KLQkJCWlmIChjdHJsYygpIHx8IGhhZF9jdHJsYygpKSB7Ci0JCQkJY2xlYXJfY3RybGMoKTsKLQkJCQlpZiAocmVzIDwgMCkKLQkJCQkJZ290X2N0cmxjID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNudCsrOwotI2lmZGVmIEFVX1RFU1RfT05MWQotCQl9IHdoaWxlIChyZXMgPCAwICYmIGNudCA8IDMpOwotCQlpZiAoY250IDwgMykKLSNlbHNlCi0JCX0gd2hpbGUgKHJlcyA8IDApOwotI2VuZGlmCi0JCS8qCi0JCSAqIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB1cGRhdGUgdGhlIEVFUFJPTSBpZiB0aGUKLQkJICogdXBkYXRlIHdhcyBpbnRlcnJ1cHRlZCBieSB0aGUgdXNlciBkdWUgdG8gZXJyb3JzLgotCQkgKi8KLQkJaWYgKGdvdF9jdHJsYyA9PSAwKQotCQkJYXVfdXBkYXRlX2VlcHJvbShpKTsKLQkJZWxzZQotCQkJLyogZW5hYmxlIHRoZSBwb3dlciBzd2l0Y2ggKi8KLQkJCSpDUExEX1ZGRF9CSyAmPSB+UE9XRVJfT0ZGOwotCX0KLQkvKiByZXN0b3JlIHRoZSBvbGQgc3RhdGUgKi8KLQlkaXNhYmxlX2N0cmxjKG9sZF9jdHJsYyk7Ci14aXQ6Ci0JdXNiX3N0b3AoKTsKLQlyZXR1cm4gcmVzOwotfQotI2VuZGlmIC8qIENPTkZJR19BVVRPX1VQREFURSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9jbWRfdHJhYi5jIGIvYm9hcmQvdHJhYi9jbWRfdHJhYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWMzYzYxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3RyYWIvY21kX3RyYWIuYworKysgL2Rldi9udWxsCkBAIC0xLDg3OSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAzCi0gKiBNYXJ0aW4gS3JhdXNlLCBUUS1TeXN0ZW1zIEdtYkgsIG1hcnRpbi5rcmF1c2VAdHFzLmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSN1bmRlZiBERUJVRwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+Ci0jaW5jbHVkZSA8cnRjLmg+Ci0KLS8qCi0gKiBUUkFCIGJvYXJkIHNwZWNpZmljIGNvbW1hbmRzLiBFc3BlY2lhbGx5IGNvbW1hbmRzIGZvciBidXJuLWluIGFuZCBmdW5jdGlvbgotICogdGVzdC4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9CU1ApCi0KLS8qIGxpbWl0cyBmb3IgdmFsaWQgcmFuZ2Ugb2YgVkNDNVYgaW4gbVYgICovCi0jZGVmaW5lIFZDQzVWX01JTiAgICAgICA0NTAwCi0jZGVmaW5lIFZDQzVWX01BWCAgICAgICA1NTAwCi0KLS8qCi0gKiBUZXN0IHN0cmluZ3MgZm9yIEVFUFJPTSB0ZXN0LiBMZW5ndGggb2Ygc3RyaW5nIDIgbXVzdCBub3QgZXhjZWVkIGxlbmd0aCBvZgotICogc3RyaW5nIDEuIE90aGVyd2lzZSBhIGJ1ZmZlciBvdmVycnVuIGNvdWxkIG9jY3VyIQotICovCi0jZGVmaW5lIEVFUFJPTV9URVNUX1NUUklOR18xICAgICIwOTg3NjU0MzIxIDp0c2V0IGEgc2kgc2lodCIKLSNkZWZpbmUgRUVQUk9NX1RFU1RfU1RSSU5HXzIgICAgInRoaXMgaXMgYSB0ZXN0OiAxMjM0NTY3ODkwIgotCi0vKgotICogbWluL21heCBsaW1pdHMgZm9yIHZhbGlkIGNvbnRhY3QgdGVtcGVyYXR1cmUgZHVyaW5nIGJ1cm4gaW4gdGVzdCAoaW4KLSAqIGRlZ3JlZSBDZW50aWdyYWRlICogMTAwKQotICovCi0jZGVmaW5lIE1JTl9DT05UQUNUX1RFTVAgICAgICAgIC0xMDAwCi0jZGVmaW5lIE1BWF9DT05UQUNUX1RFTVAgICAgICAgICs5MDAwCi0KLS8qIGJsaW5raW5nIGZyZXF1ZW5jeSBvZiBzdGF0dXMgTEVEICovCi0jZGVmaW5lIExFRF9CTElOS19GUkVRICAgICAgICAgIDUKLQotLyogZGVsYXkgdGltZSBiZXR3ZWVuIGJ1cm4gaW4gY3ljbGVzIGluIHNlY29uZHMgKi8KLSNpZm5kZWYgQlVSTl9JTl9DWUNMRV9ERUxBWSAgICAgLyogaWYgbm90IGRlZmluZWQgaW4gaW5jbHVkZS9jb25maWdzL3RyYWIuaCAqLwotI2RlZmluZSBCVVJOX0lOX0NZQ0xFX0RFTEFZICAgICA1Ci0jZW5kaWYKLQotLyogcGh5c2ljYWwgU1JBTSBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIFNSQU1fQUREUiAgICAgICAweDAyMDAwMDAwIC8qIEdDUzEgKi8KLSNkZWZpbmUgU1JBTV9TSVpFICAgICAgIDB4NDAwMDAgLyogMjU2IGtCeXRlICovCi0KLS8qIENQTEQtUmVnaXN0ZXIgZm9yIGNvbnRyb2xsaW5nIFRSQUIgaGFyZHdhcmUgZnVuY3Rpb25zICovCi0jZGVmaW5lIENQTERfQlVUVE9OUyAgICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMjAwMDApCi0jZGVmaW5lIENQTERfRklMTF9MRVZFTCAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMDgwMDApCi0jZGVmaW5lIENQTERfUk9UQVJZX1NXSVRDSCAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMTgwMDApCi0jZGVmaW5lIENQTERfUlM0ODVfUkUgICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMjgwMDApCi0KLS8qIEkyQyBFRVBST00gZGV2aWNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgSTJDX0VFUFJPTV9ERVZfQUREUiAgICAgMHg1NAotCi0vKiBFRVBST00gYWRkcmVzcyBtYXAgKi8KLSNkZWZpbmUgRUVfQUREUl9URVNUICAgICAgICAgICAgICAgICAgICAxOTIKLSNkZWZpbmUgRUVfQUREUl9NQVhfQ1lDTEVTICAgICAgICAgICAgICAyNTYKLSNkZWZpbmUgRUVfQUREUl9TVEFUVVMgICAgICAgICAgICAgICAgICAyNTgKLSNkZWZpbmUgRUVfQUREUl9QQVNTX0NZQ0xFUyAgICAgICAgICAgICAyNTkKLSNkZWZpbmUgRUVfQUREUl9GSVJTVF9FUlJPUl9DWUNMRSAgICAgICAyNjEKLSNkZWZpbmUgRUVfQUREUl9GSVJTVF9FUlJPUl9OVU0gICAgICAgICAyNjMKLSNkZWZpbmUgRUVfQUREUl9GSVJTVF9FUlJPUl9OQU1FICAgICAgICAyNjQKLSNkZWZpbmUgRUVfQUREUl9BQ1RfQ1lDTEUgICAgICAgICAgICAgICAyODAKLQotLyogQml0IGRlZmluaXRpb25zIGZvciBBRENDT04gKi8KLSNkZWZpbmUgQURDX0VOQUJMRV9TVEFSVCAgICAgMHgxCi0jZGVmaW5lIEFEQ19SRUFEX1NUQVJUICAgICAgIDB4MgotI2RlZmluZSBBRENfU1REQk0gICAgICAgICAgICAweDQKLSNkZWZpbmUgQURDX0lOUF9BSU4wICAgICAgICAgKDB4MCA8PCAzKQotI2RlZmluZSBBRENfSU5QX0FJTjEgICAgICAgICAoMHgxIDw8IDMpCi0jZGVmaW5lIEFEQ19JTlBfQUlOMiAgICAgICAgICgweDIgPDwgMykKLSNkZWZpbmUgQURDX0lOUF9BSU4zICAgICAgICAgKDB4MyA8PCAzKQotI2RlZmluZSBBRENfSU5QX0FJTjQgICAgICAgICAoMHg0IDw8IDMpCi0jZGVmaW5lIEFEQ19JTlBfQUlONSAgICAgICAgICgweDUgPDwgMykKLSNkZWZpbmUgQURDX0lOUF9BSU42ICAgICAgICAgKDB4NiA8PCAzKQotI2RlZmluZSBBRENfSU5QX0FJTjcgICAgICAgICAoMHg3IDw8IDMpCi0jZGVmaW5lIEFEQ19QUlNDRU4gICAgICAgICAgIDB4NDAwMAotI2RlZmluZSBBRENfRUNGTEcgICAgICAgICAgICAweDgwMAotCi0vKiBtaXNjICovCi0KLS8qIGV4dGVybmFscyAqLwotZXh0ZXJuIGludCBtZW1vcnlfcG9zdF90ZXN0cyAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiBpbnQgaTJjX3dyaXRlICh1Y2hhciwgdWludCwgaW50ICwgdWNoYXIqICwgaW50KTsKLWV4dGVybiBpbnQgaTJjX3JlYWQgKHVjaGFyLCB1aW50LCBpbnQgLCB1Y2hhciogLCBpbnQpOwotZXh0ZXJuIHZvaWQgdHNjMjAwMF9yZWdfaW5pdCAodm9pZCk7Ci1leHRlcm4gczMyIHRzYzIwMDBfY29udGFjdF90ZW1wICh2b2lkKTsKLWV4dGVybiB2b2lkIHRzYzIwMDBfc3BpX2luaXQodm9pZCk7Ci0KLS8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwotaW50IGRvX2RpcCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKTsKLWludCBkb192Y2M1diAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKTsKLWludCBkb19idXJuX2luIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pOwotaW50IGRvX2NvbnRhY3RfdGVtcCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKTsKLWludCBkb19idXJuX2luX3N0YXR1cyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKTsKLWludCBpMmNfd3JpdGVfbXVsdGlwbGUgKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sCi0JCQl1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKTsKLWludCBpMmNfcmVhZF9tdWx0aXBsZSAodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwKLQkJCXVjaGFyICpidWZmZXIsIGludCBsZW4pOwotaW50IGRvX3RlbXBfbG9nIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pOwotCi0vKiBoZWxwZXIgZnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCBhZGNfaW5pdCAodm9pZCk7Ci1zdGF0aWMgaW50IGFkY19yZWFkICh1bnNpZ25lZCBpbnQgY2hhbm5lbCk7Ci1zdGF0aWMgaW50IHJlYWRfZGlwICh2b2lkKTsKLXN0YXRpYyBpbnQgcmVhZF92Y2M1diAodm9pZCk7Ci1zdGF0aWMgaW50IHRlc3RfZGlwICh2b2lkKTsKLXN0YXRpYyBpbnQgdGVzdF92Y2M1diAodm9pZCk7Ci1zdGF0aWMgaW50IHRlc3Rfcm90YXJ5X3N3aXRjaCAodm9pZCk7Ci1zdGF0aWMgaW50IHRlc3Rfc3JhbSAodm9pZCk7Ci1zdGF0aWMgaW50IHRlc3RfZWVwcm9tICh2b2lkKTsKLXN0YXRpYyBpbnQgdGVzdF9jb250YWN0X3RlbXAgKHZvaWQpOwotc3RhdGljIHZvaWQgbGVkX3NldCAodW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIGxlZF9ibGluayAodm9pZCk7Ci1zdGF0aWMgdm9pZCBsZWRfaW5pdCAodm9pZCk7Ci1zdGF0aWMgdm9pZCBzZGVsYXkgKHVuc2lnbmVkIGxvbmcgc2Vjb25kcyk7IC8qIGRlbGF5IGluIHNlY29uZHMgKi8KLXN0YXRpYyBpbnQgZHVtbXkgKHZvaWQpOwotc3RhdGljIGludCByZWFkX21heF9jeWNsZXModm9pZCk7Ci1zdGF0aWMgdm9pZCB0ZXN0X2Z1bmN0aW9uX3RhYmxlX2luaXQgKHZvaWQpOwotc3RhdGljIHZvaWQgZ2xvYmFsX3ZhcnNfaW5pdCAodm9pZCk7Ci1zdGF0aWMgaW50IGdsb2JhbF92YXJzX3dyaXRlX3RvX2VlcHJvbSAodm9pZCk7Ci0KLS8qIGdsb2JhbHMgKi8KLXUxNiBtYXhfY3ljbGVzOwotdTggc3RhdHVzOwotdTE2IHBhc3NfY3ljbGVzOwotdTE2IGZpcnN0X2Vycm9yX2N5Y2xlOwotdTggZmlyc3RfZXJyb3JfbnVtOwotY2hhciBmaXJzdF9lcnJvcl9uYW1lWzE2XTsKLXUxNiBhY3RfY3ljbGU7Ci0KLXR5cGVkZWYgc3RydWN0IHRlc3RfZnVuY3Rpb25fcyB7Ci0JY2hhciAqbmFtZTsKLQlpbnQgKCpwZikodm9pZCk7Ci19IHRlc3RfZnVuY3Rpb25fdDsKLQotLyogbWF4IG51bWJlciBvZiBCdXJuIEluIEZ1bmN0aW9ucyAqLwotI2RlZmluZSBCSUZfTUFYIDYKLQotLyogdGFibGUgd2l0aCBidXJuIGluIGZ1bmN0aW9ucyAqLwotdGVzdF9mdW5jdGlvbl90IHRlc3RfZnVuY3Rpb25bQklGX01BWF07Ci0KLQotaW50IGRvX2J1cm5faW4gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKLXsKLQlpbnQgaTsKLQlpbnQgY3ljbGVfc3RhdHVzOwotCi0JaWYgKGFyZ2MgPiAxKQotCQlyZXR1cm4gY21kX3VzYWdlKGNtZHRwKTsKLQotCWxlZF9pbml0ICgpOwotCWdsb2JhbF92YXJzX2luaXQgKCk7Ci0JdGVzdF9mdW5jdGlvbl90YWJsZV9pbml0ICgpOwotCXRzYzIwMDBfc3BpX2luaXQgKCk7Ci0KLQlpZiAoZ2xvYmFsX3ZhcnNfd3JpdGVfdG9fZWVwcm9tICgpICE9IDApIHsKLQkJcHJpbnRmICgiJXM6IGVycm9yIHdyaXRpbmcgZ2xvYmFsX3ZhcnMgdG8gZWVwcm9tXG4iLAotCQkJX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQlpZiAocmVhZF9tYXhfY3ljbGVzICgpICE9IDApIHsKLQkJcHJpbnRmICgiJXM6IGVycm9yIHJlYWRpbmcgbWF4X2N5Y2xlcyBmcm9tIGVlcHJvbVxuIiwKLQkJCV9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0JaWYgKG1heF9jeWNsZXMgPT0gMCkgewotCQlwcmludGYgKCIlczogZXJyb3IsIGJ1cm4gaW4gbWF4X2N5Y2xlcyA9IDBcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0Jc3RhdHVzID0gMDsKLQlmb3IgKGFjdF9jeWNsZSA9IDE7IGFjdF9jeWNsZSA8PSBtYXhfY3ljbGVzOyBhY3RfY3ljbGUrKykgewotCi0JCWN5Y2xlX3N0YXR1cyA9IDA7Ci0KLQkJLyoKLQkJICogYXZvaWQgdGltZXN0YW1wIG92ZXJmbG93IHByb2JsZW0gYWZ0ZXIgYWJvdXQgNjggbWludXRlcyBvZgotCQkgKiB1ZGVsYXkoKSB0aW1lLgotCQkgKi8KLQkJcmVzZXRfdGltZXJfbWFza2VkICgpOwotCQlmb3IgKGkgPSAwOyBpIDwgQklGX01BWDsgaSsrKSB7Ci0KLQkJCS8qIGNhbGwgdGVzdCBmdW5jdGlvbiAqLwotCQkJaWYgKCgqdGVzdF9mdW5jdGlvbltpXS5wZikoKSAhPSAwKSB7Ci0JCQkJcHJpbnRmICgiZXJyb3IgaW4gJXMgdGVzdFxuIiwKLQkJCQkJdGVzdF9mdW5jdGlvbltpXS5uYW1lKTsKLQotCQkJCS8qIGlzIGl0IHRoZSBmaXJzdCBlcnJvcj8gKi8KLQkJCQlpZiAoc3RhdHVzID09IDApIHsKLQkJCQkJc3RhdHVzID0gMTsKLQkJCQkJZmlyc3RfZXJyb3JfY3ljbGUgPSBhY3RfY3ljbGU7Ci0KLQkJCQkJLyogZG8gbm90IHVzZSBlcnJvcl9udW0gMCAqLwotCQkJCQlmaXJzdF9lcnJvcl9udW0gPSBpKzE7Ci0JCQkJCXN0cm5jcHkgKGZpcnN0X2Vycm9yX25hbWUsCi0JCQkJCQkgdGVzdF9mdW5jdGlvbltpXS5uYW1lLAotCQkJCQkJIHNpemVvZiAoZmlyc3RfZXJyb3JfbmFtZSkpOwotCQkJCQlsZWRfc2V0ICgwKTsKLQkJCQl9Ci0JCQkJY3ljbGVfc3RhdHVzID0gMTsKLQkJCX0KLQkJfQotCQkvKiB3ZXJlIGFsbCB0ZXN0cyBvZiBhY3R1YWwgY3ljbGUgT0s/ICovCi0JCWlmIChjeWNsZV9zdGF0dXMgPT0gMCkKLQkJCXBhc3NfY3ljbGVzKys7Ci0KLQkJLyogc2V0IHN0YXR1cyBMRUQgaWYgbm8gZXJyb3IgaXMgb2Njb3VyZWQgc2luY2UgeWV0ICovCi0JCWlmIChzdGF0dXMgPT0gMCkKLQkJCWxlZF9zZXQgKDEpOwotCi0JCXByaW50ZiAoIiVzOiBjeWNsZSAlZCBmaW5pc2hlZFxuIiwgX19GVU5DVElPTl9fLCBhY3RfY3ljbGUpOwotCi0JCS8qIHBhdXNlIGJldHdlZW4gY3ljbGVzICovCi0JCXNkZWxheSAoQlVSTl9JTl9DWUNMRV9ERUxBWSk7Ci0JfQotCi0JaWYgKGdsb2JhbF92YXJzX3dyaXRlX3RvX2VlcHJvbSAoKSAhPSAwKSB7Ci0JCWxlZF9zZXQgKDApOwotCQlwcmludGYgKCIlczogZXJyb3Igd3JpdGluZyBnbG9iYWxfdmFycyB0byBlZXByb21cbiIsCi0JCQlfX0ZVTkNUSU9OX18pOwotCQlzdGF0dXMgPSAxOwotCX0KLQotCWlmIChzdGF0dXMgPT0gMCkgewotCQlsZWRfYmxpbmsgKCk7ICAgLyogZW5kbGVzcyBsb29wISEgKi8KLQkJcmV0dXJuICgwKTsKLQl9IGVsc2UgewotCQlsZWRfc2V0ICgwKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci19Ci0KLVVfQk9PVF9DTUQoCi0JYnVybl9pbiwJMSwJMSwJZG9fYnVybl9pbiwKLQkic3RhcnQgYnVybi1pbiB0ZXN0IGFwcGxpY2F0aW9uIG9uIFRSQUIiLAotCSJcbiIKLQkiICAgIC0gIHN0YXJ0IGJ1cm4taW4gdGVzdCBhcHBsaWNhdGlvblxuIgotCSIgICAgICAgVGhlIGJ1cm4taW4gdGVzdCBjb3VsZCB0b29rIGEgd2hpbGUgdG8gZmluaXNoIVxuIgotCSIgICAgICAgVGhlIGNvbnRlbnQgb2YgdGhlIG9uYm9hcmQgRUVQUk9NIGlzIG1vZGlmaWVkISIKLSk7Ci0KLQotaW50IGRvX2RpcCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQotewotCWludCBpLCBkaXA7Ci0KLQlpZiAoYXJnYyA+IDEpCi0JCXJldHVybiBjbWRfdXNhZ2UoY21kdHApOwotCi0JaWYgKChkaXAgPSByZWFkX2RpcCAoKSkgPT0gLTEpCi0JCXJldHVybiAxOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAoKGRpcCAmICgxIDw8IGkpKSA9PSAwKQotCQkJcHJpbnRmKCIwIik7Ci0JCWVsc2UKLQkJCXByaW50ZigiMSIpOwotCX0KLQlwcmludGYoIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotVV9CT09UX0NNRCgKLQlkaXAsCTEsCTEsCWRvX2RpcCwKLQkicmVhZCBkaXAgc3dpdGNoIG9uIFRSQUIiLAotCSJcbiIKLQkiICAgIC0gcmVhZCBzdGF0ZSBvZiBkaXAgc3dpdGNoIChTMSkgb24gVFJBQiBib2FyZFxuIgotCSIgICAgICByZWFkIHNlcXVlbmNlOiAxLTItMy00OyBPTj0xOyBPRkY9MDsgZS5nLjogXCIwMTAwXCIiCi0pOwotCi0KLWludCBkb192Y2M1diAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQotewotCWludCB2Y2M1djsKLQotCWlmIChhcmdjID4gMSkKLQkJcmV0dXJuIGNtZF91c2FnZShjbWR0cCk7Ci0KLQlpZiAoKHZjYzV2ID0gcmVhZF92Y2M1diAoKSkgPT0gLTEpCi0JCXJldHVybiAoMSk7Ci0KLQlwcmludGYgKCIlZCIsICh2Y2M1diAvIDEwMDApKTsKLQlwcmludGYgKCIuJWQiLCAodmNjNXYgJSAxMDAwKSAvIDEwMCk7Ci0JcHJpbnRmICgiJWQgVlxuIiwgKHZjYzV2ICUgMTAwKSAvIDEwKSA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotVV9CT09UX0NNRCgKLQl2Y2M1diwJMSwJMSwJZG9fdmNjNXYsCi0JInJlYWQgVkNDNVYgb24gVFJBQiIsCi0JIlxuIgotCSIgICAgLSByZWFkIGFjdHVhbCB2YWx1ZSBvZiB2b2x0YWdlIFZDQzVWIgotKTsKLQotCi1pbnQgZG9fY29udGFjdF90ZW1wIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCi17Ci0JaW50IGNvbnRhY3RfdGVtcDsKLQotCWlmIChhcmdjID4gMSkKLQkJcmV0dXJuIGNtZF91c2FnZShjbWR0cCk7Ci0KLQl0c2MyMDAwX3NwaV9pbml0ICgpOwotCi0JY29udGFjdF90ZW1wID0gdHNjMjAwMF9jb250YWN0X3RlbXAoKTsKLQlwcmludGYgKCIlZCBkZWdyZWUgQyAqIDEwMFxuIiwgY29udGFjdF90ZW1wKSA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotVV9CT09UX0NNRCgKLQljX3RlbXAsCTEsCTEsCWRvX2NvbnRhY3RfdGVtcCwKLQkicmVhZCBjb250YWN0IHRlbXBlcmF0dXJlIG9uIFRSQUIiLAotCSIiCi0JIiAgICAtICByZWFkcyB0aGUgb25ib2FyZCB0ZW1wZXJhdHVyZSAoPWNvbnRhY3QgdGVtcGVyYXR1cmUpXG4iCi0pOwotCi0KLWludCBkb19idXJuX2luX3N0YXR1cyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQotewotCWlmIChhcmdjID4gMSkKLQkJcmV0dXJuIGNtZF91c2FnZShjbWR0cCk7Ci0KLQlpZiAoaTJjX3JlYWRfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfU1RBVFVTLCAxLAotCQkJCSh1bnNpZ25lZCBjaGFyKikgJnN0YXR1cywgMSkpCi0JCXJldHVybiAoMSk7Ci0KLQlpZiAoaTJjX3JlYWRfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfUEFTU19DWUNMRVMsIDEsCi0JCQkJKHVuc2lnbmVkIGNoYXIqKSAmcGFzc19jeWNsZXMsIDIpKQotCQlyZXR1cm4gKDEpOwotCi0JaWYgKGkyY19yZWFkX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBFRV9BRERSX0ZJUlNUX0VSUk9SX0NZQ0xFLAotCQkJCTEsICh1bnNpZ25lZCBjaGFyKikgJmZpcnN0X2Vycm9yX2N5Y2xlLCAyKSkKLQkJcmV0dXJuICgxKTsKLQotCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgRUVfQUREUl9GSVJTVF9FUlJPUl9OVU0sCi0JCQkJMSwgKHVuc2lnbmVkIGNoYXIqKSAmZmlyc3RfZXJyb3JfbnVtLCAxKSkKLQkJcmV0dXJuICgxKTsKLQotCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgRUVfQUREUl9GSVJTVF9FUlJPUl9OQU1FLAotCQkJICAgICAgIDEsICh1bnNpZ25lZCBjaGFyKilmaXJzdF9lcnJvcl9uYW1lLAotCQkJICAgICAgIHNpemVvZiAoZmlyc3RfZXJyb3JfbmFtZSkpKQotCQlyZXR1cm4gKDEpOwotCi0JaWYgKHJlYWRfbWF4X2N5Y2xlcyAoKSAhPSAwKQotCQlyZXR1cm4gKDEpOwotCi0JcHJpbnRmICgibWF4X2N5Y2xlcyA9ICVkXG4iLCBtYXhfY3ljbGVzKTsKLQlwcmludGYgKCJzdGF0dXMgPSAlZFxuIiwgc3RhdHVzKTsKLQlwcmludGYgKCJwYXNzX2N5Y2xlcyA9ICVkXG4iLCBwYXNzX2N5Y2xlcyk7Ci0JcHJpbnRmICgiZmlyc3RfZXJyb3JfY3ljbGUgPSAlZFxuIiwgZmlyc3RfZXJyb3JfY3ljbGUpOwotCXByaW50ZiAoImZpcnN0X2Vycm9yX251bSA9ICVkXG4iLCBmaXJzdF9lcnJvcl9udW0pOwotCXByaW50ZiAoImZpcnN0X2Vycm9yX25hbWUgPSAlLipzXG4iLChpbnQpIHNpemVvZihmaXJzdF9lcnJvcl9uYW1lKSwKLQkJZmlyc3RfZXJyb3JfbmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotVV9CT09UX0NNRCgKLQliaXMsCTEsCTEsCWRvX2J1cm5faW5fc3RhdHVzLAotCSJwcmludCBidXJuIGluIHN0YXR1cyBvbiBUUkFCIiwKLQkiXG4iCi0JIiAgICAtICBwcmludHMgdGhlIHN0YXR1cyB2YXJpYWJsZXMgb2YgdGhlIGxhc3QgYnVybiBpbiB0ZXN0XG4iCi0JIiAgICAgICBzdG9yZWQgaW4gdGhlIG9uYm9hcmQgRUVQUk9NIG9uIFRSQUIgYm9hcmQiCi0pOwotCi1zdGF0aWMgaW50IHJlYWRfZGlwICh2b2lkKQotewotCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwotCWludCBhZGNfdmFsOwotCWludCBpOwotCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JIERJUCBzd2l0Y2ggY29ubmVjdGlvbiAoYWNjb3JkaW5nIHRvIHdhNC1jcHUuc3AuMzAxLnBkZiwgcGFnZSAzKToKLQkgICBTVzEgLSBBSU40Ci0JICAgU1cyIC0gQUlONQotCSAgIFNXMyAtIEFJTjYKLQkgICBTVzQgLSBBSU43Ci0KLQkgICAiT24iIERJUCBzd2l0Y2ggcG9zaXRpb24gc2hvcnQtY2lyY3VpdHMgdGhlIHZvbHRhZ2UgZnJvbQotCSAgIHRoZSBpbnB1dCBjaGFubmVsIChpLmUuICcwJyBjb252ZXJzaW9uIHJlc3VsdCBtZWFucyAib24iKS4KLQkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0JZm9yIChpID0gNzsgaSA+IDM7IGktLSkgewotCi0JCWlmICgoYWRjX3ZhbCA9IGFkY19yZWFkIChpKSkgPT0gLTEpIHsKLQkJCXByaW50ZiAoIiVzOiBDaGFubmVsICVkIGNvdWxkIG5vdCBiZSByZWFkXG4iLAotCQkJCSBfX0ZVTkNUSU9OX18sIGkpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQotCQkvKgotCQkgKiBJbnB1dCB2b2x0YWdlIChzd2l0Y2ggb3BlbikgaXMgMS44IFYuCi0JCSAqIChWaW5fSGlnaC9WUmVmKSphZGNfcmVzID0gKDEsOFYvMiw1VikqMTAyMykgPSA3MzYKLQkJICogU2V0IHRyaWdnZXIgYXQgaGFsdmUgdGhhdCB2YWx1ZS4KLQkJICovCi0JCWlmIChhZGNfdmFsIDwgMzY4KQotCQkJcmVzdWx0IHw9ICgxIDw8IChpLTQpKTsKLQl9Ci0JcmV0dXJuIChyZXN1bHQpOwotfQotCi0KLXN0YXRpYyBpbnQgcmVhZF92Y2M1diAodm9pZCkKLXsKLQlzMzIgcmVzdWx0OwotCi0JLyogVkNDNVYgaXMgY29ubmVjdGVkIHRvIGNoYW5uZWwgMiAqLwotCi0JaWYgKChyZXN1bHQgPSBhZGNfcmVhZCAoMikpID09IC0xKSB7Ci0JCXByaW50ZiAoIiVzOiBWQ0M1ViBjb3VsZCBub3QgYmUgcmVhZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCS8qCi0JICogQ2FsY3VsYXRlIHZvbHRhZ2UgdmFsdWUuIFNwbGl0IGluIHR3byBwYXJ0cyBiZWNhdXNlIHRoZXJlIGlzIG5vCi0JICogZmxvYXRpbmcgcG9pbnQgc3VwcG9ydC4gIFZDQzVWIGlzIGNvbm5lY3RlZCBvdmVyIGFuIHJlc2lzdG9yIGRpdmlkZXI6Ci0JICogVkNDNVY9QURDdmFsKjIsNVYvMTAyMyooMTBLKzMwSykvMTBLLgotCSAqLwotCXJlc3VsdCA9IHJlc3VsdCAqIDEwICogMTAwMCAvIDEwMjM7IC8qIHJlc3VsdCBpbiBtViAqLwotCi0JcmV0dXJuIChyZXN1bHQpOwotfQotCi0KLXN0YXRpYyBpbnQgdGVzdF9kaXAgKHZvaWQpCi17Ci0Jc3RhdGljIGludCBmaXJzdF9ydW4gPSAxOwotCXN0YXRpYyBpbnQgZmlyc3RfZGlwOwotCi0JaWYgKGZpcnN0X3J1bikgewotCQlpZiAoKGZpcnN0X2RpcCA9IHJlYWRfZGlwICgpKSA9PSAtMSkgewotCQkJcmV0dXJuICgxKTsKLQkJfQotCQlmaXJzdF9ydW4gPSAwOwotCQlkZWJ1ZyAoIiVzOiBmaXJzdF9kaXA9JWRcbiIsIF9fRlVOQ1RJT05fXywgZmlyc3RfZGlwKTsKLQl9Ci0JaWYgKGZpcnN0X2RpcCAhPSByZWFkX2RpcCAoKSkgewotCQlyZXR1cm4gKDEpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgdGVzdF92Y2M1diAodm9pZCkKLXsKLQlpbnQgdmNjNXY7Ci0KLQlpZiAoKHZjYzV2ID0gcmVhZF92Y2M1diAoKSkgPT0gLTEpIHsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQlpZiAoKHZjYzV2ID4gVkNDNVZfTUFYKSB8fCAodmNjNXYgPCBWQ0M1Vl9NSU4pKSB7Ci0JCXByaW50ZiAoIiVzOiB2Y2M1dltWLzEwMF09JWRcbiIsIF9fRlVOQ1RJT05fXywgdmNjNXYpOwotCQlyZXR1cm4gKDEpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgdGVzdF9yb3Rhcnlfc3dpdGNoICh2b2lkKQotewotCXN0YXRpYyBpbnQgZmlyc3RfcnVuID0gMTsKLQlzdGF0aWMgaW50IGZpcnN0X3JzOwotCi0JaWYgKGZpcnN0X3J1bikgewotCQkvKgotCQkgKiBjbGVhciBiaXRzIGluIENQTEQsIGJlY2F1c2UgdGhleSBoYXZlIHJhbmRvbSB2YWx1ZXMgYWZ0ZXIKLQkJICogcG93ZXItdXAgb3IgcmVzZXQuCi0JCSAqLwotCQkqQ1BMRF9ST1RBUllfU1dJVENIIHw9ICgxIDw8IDE2KSB8ICgxIDw8IDE3KTsKLQotCQlmaXJzdF9ycyA9ICgoKkNQTERfUk9UQVJZX1NXSVRDSCA+PiAxNikgJiAweDcpOwotCQlmaXJzdF9ydW4gPSAwOwotCQlkZWJ1ZyAoIiVzOiBmaXJzdF9ycz0lZFxuIiwgX19GVU5DVElPTl9fLCBmaXJzdF9ycyk7Ci0JfQotCi0JaWYgKGZpcnN0X3JzICE9ICgoKkNQTERfUk9UQVJZX1NXSVRDSCA+PiAxNikgJiAweDcpKSB7Ci0JCXJldHVybiAoMSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLQotc3RhdGljIGludCB0ZXN0X3NyYW0gKHZvaWQpCi17Ci0JcmV0dXJuIChtZW1vcnlfcG9zdF90ZXN0cyAoU1JBTV9BRERSLCBTUkFNX1NJWkUpKTsKLX0KLQotCi1zdGF0aWMgaW50IHRlc3RfZWVwcm9tICh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgdGVtcFtzaXplb2YgKEVFUFJPTV9URVNUX1NUUklOR18xKV07Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQkvKiB3cml0ZSB0ZXN0IHN0cmluZyAxLCByZWFkIGJhY2sgYW5kIHZlcmlmeSAqLwotCWlmIChpMmNfd3JpdGVfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfVEVTVCwgMSwKLQkJCQkodW5zaWduZWQgY2hhciopRUVQUk9NX1RFU1RfU1RSSU5HXzEsCi0JCQkJc2l6ZW9mIChFRVBST01fVEVTVF9TVFJJTkdfMSkpKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0JaWYgKGkyY19yZWFkX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBFRV9BRERSX1RFU1QsIDEsCi0JCQkgICAgICAgdGVtcCwgc2l6ZW9mIChFRVBST01fVEVTVF9TVFJJTkdfMSkpKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0JaWYgKHN0cmNtcCAoKGNoYXIgKil0ZW1wLCBFRVBST01fVEVTVF9TVFJJTkdfMSkgIT0gMCkgewotCQlyZXN1bHQgPSAxOwotCQlwcmludGYgKCIlczogZXJyb3I7IHJlYWRfc3RyID0gXCIlc1wiXG4iLCBfX0ZVTkNUSU9OX18sIHRlbXApOwotCX0KLQotCS8qIHdyaXRlIHRlc3Qgc3RyaW5nIDIsIHJlYWQgYmFjayBhbmQgdmVyaWZ5ICovCi0JaWYgKHJlc3VsdCA9PSAwKSB7Ci0JCWlmIChpMmNfd3JpdGVfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfVEVTVCwgMSwKLQkJCQkJKHVuc2lnbmVkIGNoYXIqKUVFUFJPTV9URVNUX1NUUklOR18yLAotCQkJCQlzaXplb2YgKEVFUFJPTV9URVNUX1NUUklOR18yKSkpIHsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLQotCQlpZiAoaTJjX3JlYWRfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfVEVTVCwgMSwKLQkJCQkgICAgICAgdGVtcCwgc2l6ZW9mIChFRVBST01fVEVTVF9TVFJJTkdfMikpKSB7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0KLQkJaWYgKHN0cmNtcCAoKGNoYXIgKil0ZW1wLCBFRVBST01fVEVTVF9TVFJJTkdfMikgIT0gMCkgewotCQkJcmVzdWx0ID0gMTsKLQkJCXByaW50ZiAoIiVzOiBlcnJvcjsgcmVhZCBzdHIgPSBcIiVzXCJcbiIsCi0JCQkJX19GVU5DVElPTl9fLCB0ZW1wKTsKLQkJfQotCX0KLQlyZXR1cm4gKHJlc3VsdCk7Ci19Ci0KLQotc3RhdGljIGludCB0ZXN0X2NvbnRhY3RfdGVtcCAodm9pZCkKLXsKLQlpbnQgY29udGFjdF90ZW1wOwotCi0JY29udGFjdF90ZW1wID0gdHNjMjAwMF9jb250YWN0X3RlbXAgKCk7Ci0KLQlpZiAoKGNvbnRhY3RfdGVtcCA8IE1JTl9DT05UQUNUX1RFTVApCi0JICAgIHx8IChjb250YWN0X3RlbXAgPiBNQVhfQ09OVEFDVF9URU1QKSkKLQkJcmV0dXJuICgxKTsKLQllbHNlCi0JCXJldHVybiAoMCk7Ci19Ci0KLQotaW50IGkyY193cml0ZV9tdWx0aXBsZSAodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwKLQkJCXVjaGFyICpidWZmZXIsIGludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlpZiAoYWxlbiAhPSAxKSB7Ci0JCXByaW50ZiAoIiVzOiBhZGRyIGxlbiBvdGhlciB0aGFuIDEgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gKDEpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlpZiAoaTJjX3dyaXRlIChjaGlwLCBhZGRyK2ksIGFsZW4sIGJ1ZmZlcitpLCAxKSkgewotCQkJcHJpbnRmICgiJXM6IGNvdWxkIG5vdCB3cml0ZSB0byBpMmMgZGV2aWNlICVkIgotCQkJCSAiLCBhZGRyICVkXG4iLCBfX0ZVTkNUSU9OX18sIGNoaXAsIGFkZHIpOwotCQkJcmV0dXJuICgxKTsKLQkJfQotI2lmIDAKLQkJcHJpbnRmICgiY2hpcD0lI3gsIGFkZHIraT0lI3grJWQ9JXAsIGFsZW49JWQsICpidWZmZXIraT0iCi0JCQkiJSN4KyVkPSVwPVwiJS4xc1wiXG4iLCBjaGlwLCBhZGRyLCBpLCBhZGRyK2ksCi0JCQlhbGVuLCBidWZmZXIsIGksIGJ1ZmZlcitpLCBidWZmZXIraSk7Ci0jZW5kaWYKLQotCQl1ZGVsYXkgKDMwMDAwKTsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotCi1pbnQgaTJjX3JlYWRfbXVsdGlwbGUgKCB1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLAotCQkJdWNoYXIgKmJ1ZmZlciwgaW50IGxlbikKLXsKLQlpbnQgaTsKLQotCWlmIChhbGVuICE9IDEpIHsKLQkJcHJpbnRmICgiJXM6IGFkZHIgbGVuIG90aGVyIHRoYW4gMSBub3Qgc3VwcG9ydGVkXG4iLAotCQkJIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChpMmNfcmVhZCAoY2hpcCwgYWRkcitpLCBhbGVuLCBidWZmZXIraSwgMSkpIHsKLQkJCXByaW50ZiAoIiVzOiBjb3VsZCBub3QgcmVhZCBmcm9tIGkyYyBkZXZpY2UgJSN4IgotCQkJCSAiLCBhZGRyICVkXG4iLCBfX0ZVTkNUSU9OX18sIGNoaXAsIGFkZHIpOwotCQkJcmV0dXJuICgxKTsKLQkJfQotCX0KLQlyZXR1cm4gKDApOwotfQotCi0KLXN0YXRpYyBpbnQgYWRjX3JlYWQgKHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCWludCBqID0gMTAwMDsgLyogdGltZW91dCB2YWx1ZSBmb3Igd2FpdCBsb29wIGluIHVzICovCi0JaW50IHJlc3VsdDsKLQlzdHJ1Y3QgczNjMjQwMF9hZGMgKnBhZGM7Ci0KLQlwYWRjID0gczNjMjQwMF9nZXRfYmFzZV9hZGMoKTsKLQljaGFubmVsICY9IDB4NzsKLQotCWFkY19pbml0ICgpOwotCi0JcGFkYy0+YWRjY29uICY9IH5BRENfU1REQk07IC8qIHNlbGVjdCBub3JtYWwgbW9kZSAqLwotCXBhZGMtPmFkY2NvbiAmPSB+KDB4NyA8PCAzKTsgLyogY2xlYXIgdGhlIGNoYW5uZWwgYml0cyAqLwotCXBhZGMtPmFkY2NvbiB8PSAoKGNoYW5uZWwgPDwgMykgfCBBRENfRU5BQkxFX1NUQVJUKTsKLQotCXdoaWxlIChqLS0pIHsKLQkJaWYgKChwYWRjLT5hZGNjb24gJiBBRENfRU5BQkxFX1NUQVJUKSA9PSAwKQotCQkJYnJlYWs7Ci0JCXVkZWxheSAoMSk7Ci0JfQotCi0JaWYgKGogPT0gMCkgewotCQlwcmludGYoIiVzOiBBREMgdGltZW91dFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcGFkYy0+YWRjY29uIHw9IEFEQ19TVERCTTsgLyogc2VsZWN0IHN0YW5kYnkgbW9kZSAqLwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmVzdWx0ID0gcGFkYy0+YWRjZGF0ICYgMHgzRkY7Ci0KLQlwYWRjLT5hZGNjb24gfD0gQURDX1NUREJNOyAvKiBzZWxlY3Qgc3RhbmRieSBtb2RlICovCi0KLQlkZWJ1ZyAoIiVzOiBjaGFubmVsICVkLCByZXN1bHRbRElHSVRdPSVkXG4iLCBfX0ZVTkNUSU9OX18sCi0JICAgICAgIChwYWRjLT5hZGNjb24gPj4gMykgJiAweDcsIHJlc3VsdCk7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIEFEQyB0byBiZSByZWFkeSBmb3IgbmV4dCBjb252ZXJzaW9uLiBUaGlzIGRlbGF5IHZhbHVlIHdhcwotCSAqIGVzdGltYXRlZCwgYmVjYXVzZSB0aGUgZGF0YXNoZWV0IGRvZXMgbm90IHNwZWNpZnkgYSB2YWx1ZS4KLQkgKi8KLQl1ZGVsYXkgKDEwMDApOwotCi0JcmV0dXJuIChyZXN1bHQpOwotfQotCi0KLXN0YXRpYyB2b2lkIGFkY19pbml0ICh2b2lkKQotewotCXN0cnVjdCBzM2MyNDAwX2FkYyAqcGFkYzsKLQotCXBhZGMgPSBzM2MyNDAwX2dldF9iYXNlX2FkYygpOwotCi0JcGFkYy0+YWRjY29uICY9IH4oMHhmZiA8PCA2KTsgLyogY2xlYXIgcHJlc2NhbGVyIGJpdHMgKi8KLQlwYWRjLT5hZGNjb24gfD0gKCg2NSA8PCA2KSB8IEFEQ19QUlNDRU4pOyAvKiBzZXQgcHJlc2NhbGVyICovCi0KLQkvKgotCSAqIFdhaXQgc29tZSB0aW1lIHRvIGF2b2lkIHByb2JsZW0gd2l0aCB2ZXJ5IGZpcnN0IGNhbGwgb2YKLQkgKiBhZGNfcmVhZCgpLiBXaXRob3V0IHRoaXMgZGVsYXksIHNvbWV0aW1lcyB0aGUgZmlyc3QgcmVhZAotCSAqIGFkYyB2YWx1ZSBpcyAwLiBQZXJoYXBzIGJlY2F1c2UgdGhlIGFkanVzdG1lbnQgb2YgcHJlc2NhbGVyCi0JICogdGFrZXMgc29tZSBjbG9jayBjeWNsZXM/Ci0JICovCi0JdWRlbGF5ICgxMDAwKTsKLQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgdm9pZCBsZWRfc2V0ICh1bnNpZ25lZCBpbnQgc3RhdGUpCi17Ci0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQotCWxlZF9pbml0ICgpOwotCi0Jc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgMDogLyogdHVybiBMRUQgb2ZmICovCi0JCWdwaW8tPnBhZGF0IHw9ICgxIDw8IDEyKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOiAvKiB0dXJuIExFRCBvbiAqLwotCQlncGlvLT5wYWRhdCAmPSB+KDEgPDwgMTIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGxlZF9ibGluayAodm9pZCkKLXsKLQlsZWRfaW5pdCAoKTsKLQotCS8qIGJsaW5rIExFRC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4hICovCi0Jd2hpbGUgKDEpIHsKLQkJcmVzZXRfdGltZXJfbWFza2VkICgpOwotCQlsZWRfc2V0ICgxKTsKLQkJdWRlbGF5ICgxMDAwMDAwIC8gTEVEX0JMSU5LX0ZSRVEgLyAyKTsKLQkJbGVkX3NldCAoMCk7Ci0JCXVkZWxheSAoMTAwMDAwMCAvIExFRF9CTElOS19GUkVRIC8gMik7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIGxlZF9pbml0ICh2b2lkKQotewotCXN0cnVjdCBzM2MyNHgwX2dwaW8gKiBjb25zdCBncGlvID0gczNjMjR4MF9nZXRfYmFzZV9ncGlvKCk7Ci0KLQkvKiBjb25maWd1cmUgR1BBMTIgYXMgb3V0cHV0IGFuZCBzZXQgdG8gSGlnaCAtPiBMRUQgb2ZmICovCi0JZ3Bpby0+cGFjb24gJj0gfigxIDw8IDEyKTsKLQlncGlvLT5wYWRhdCB8PSAoMSA8PCAxMik7Ci19Ci0KLQotc3RhdGljIHZvaWQgc2RlbGF5ICh1bnNpZ25lZCBsb25nIHNlY29uZHMpCi17Ci0JdW5zaWduZWQgbG9uZyBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNlY29uZHM7IGkrKykgewotCQl1ZGVsYXkgKDEwMDAwMDApOwotCX0KLX0KLQotCi1zdGF0aWMgaW50IGdsb2JhbF92YXJzX3dyaXRlX3RvX2VlcHJvbSAodm9pZCkKLXsKLQlpZiAoaTJjX3dyaXRlX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBFRV9BRERSX1NUQVRVUywgMSwKLQkJCQkodW5zaWduZWQgY2hhciopICZzdGF0dXMsIDEpKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotCWlmIChpMmNfd3JpdGVfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfUEFTU19DWUNMRVMsIDEsCi0JCQkJKHVuc2lnbmVkIGNoYXIqKSAmcGFzc19jeWNsZXMsIDIpKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotCWlmIChpMmNfd3JpdGVfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfRklSU1RfRVJST1JfQ1lDTEUsCi0JCQkJMSwgKHVuc2lnbmVkIGNoYXIqKSAmZmlyc3RfZXJyb3JfY3ljbGUsIDIpKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotCWlmIChpMmNfd3JpdGVfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfRklSU1RfRVJST1JfTlVNLAotCQkJCTEsICh1bnNpZ25lZCBjaGFyKikgJmZpcnN0X2Vycm9yX251bSwgMSkpIHsKLQkJcmV0dXJuICgxKTsKLQl9Ci0JaWYgKGkyY193cml0ZV9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgRUVfQUREUl9GSVJTVF9FUlJPUl9OQU1FLAotCQkJCTEsICh1bnNpZ25lZCBjaGFyKikgZmlyc3RfZXJyb3JfbmFtZSwKLQkJCQlzaXplb2YoZmlyc3RfZXJyb3JfbmFtZSkpKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdsb2JhbF92YXJzX2luaXQgKHZvaWQpCi17Ci0Jc3RhdHVzICAgICAgICAgICAgICAgICAgPSAxOyAvKiBlcnJvciAqLwotCXBhc3NfY3ljbGVzICAgICAgICAgICAgID0gMDsKLQlmaXJzdF9lcnJvcl9jeWNsZSAgICAgICA9IDA7Ci0JZmlyc3RfZXJyb3JfbnVtICAgICAgICAgPSAwOwotCWZpcnN0X2Vycm9yX25hbWVbMF0gICAgID0gJ1wwJzsKLQlhY3RfY3ljbGUgICAgICAgICAgICAgICA9IDA7Ci0JbWF4X2N5Y2xlcyAgICAgICAgICAgICAgPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHRlc3RfZnVuY3Rpb25fdGFibGVfaW5pdCAodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBCSUZfTUFYOyBpKyspCi0JCXRlc3RfZnVuY3Rpb25baV0ucGYgPSBkdW1teTsKLQotCS8qCi0JICogdGhlIGxlbmd0aCBvZiAibmFtZSIgbXVzdCBub3QgZXhjZWVkIDE2LCBpbmNsdWRpbmcgdGhlICdcMCcKLQkgKiB0ZXJtaW5hdGlvbi4gU2VlIGFsc28gdGhlIEVFUFJPTSBhZGRyZXNzIG1hcC4KLQkgKi8KLQl0ZXN0X2Z1bmN0aW9uWzBdLnBmID0gdGVzdF9kaXA7Ci0JdGVzdF9mdW5jdGlvblswXS5uYW1lID0gImRpcCI7Ci0KLQl0ZXN0X2Z1bmN0aW9uWzFdLnBmID0gdGVzdF92Y2M1djsKLQl0ZXN0X2Z1bmN0aW9uWzFdLm5hbWUgPSAidmNjNXYiOwotCi0JdGVzdF9mdW5jdGlvblsyXS5wZiA9IHRlc3Rfcm90YXJ5X3N3aXRjaDsKLQl0ZXN0X2Z1bmN0aW9uWzJdLm5hbWUgPSAicm90YXJ5X3N3aXRjaCI7Ci0KLQl0ZXN0X2Z1bmN0aW9uWzNdLnBmID0gdGVzdF9zcmFtOwotCXRlc3RfZnVuY3Rpb25bM10ubmFtZSA9ICJzcmFtIjsKLQotCXRlc3RfZnVuY3Rpb25bNF0ucGYgPSB0ZXN0X2VlcHJvbTsKLQl0ZXN0X2Z1bmN0aW9uWzRdLm5hbWUgPSAiZWVwcm9tIjsKLQotCXRlc3RfZnVuY3Rpb25bNV0ucGYgPSB0ZXN0X2NvbnRhY3RfdGVtcDsKLQl0ZXN0X2Z1bmN0aW9uWzVdLm5hbWUgPSAiY29udGFjdF90ZW1wIjsKLX0KLQotCi1zdGF0aWMgaW50IHJlYWRfbWF4X2N5Y2xlcyAodm9pZCkKLXsKLQlpZiAoaTJjX3JlYWRfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIEVFX0FERFJfTUFYX0NZQ0xFUywgMSwKLQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSAmbWF4X2N5Y2xlcywgMikgIT0gMCkgewotCQlyZXR1cm4gKDEpOwotCX0KLQotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHVtbXkodm9pZCkKLXsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQgZG9fdGVtcF9sb2cgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKLXsKLQlpbnQgY29udGFjdF90ZW1wOwotCWludCBkZWxheSA9IDA7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0RBVEUpCi0Jc3RydWN0IHJ0Y190aW1lIHRtOwotI2VuZGlmCi0KLQlpZiAoYXJnYyA+IDIpCi0JCXJldHVybiBjbWRfdXNhZ2UoY21kdHApOwotCi0JaWYgKGFyZ2MgPiAxKQotCQlkZWxheSA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDEwKTsKLQotCXRzYzIwMDBfc3BpX2luaXQgKCk7Ci0Jd2hpbGUgKDEpIHsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9EQVRFKQotCQlydGNfZ2V0ICgmdG0pOwotCQlwcmludGYgKCIlNGQtJTAyZC0lMDJkICUyZDolMDJkOiUwMmQgLSAiLAotCQkJdG0udG1feWVhciwgdG0udG1fbW9uLCB0bS50bV9tZGF5LAotCQkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMpOwotI2VuZGlmCi0KLQkJY29udGFjdF90ZW1wID0gdHNjMjAwMF9jb250YWN0X3RlbXAoKTsKLQkJcHJpbnRmICgiJWRcbiIsIGNvbnRhY3RfdGVtcCkgOwotCi0JCWlmIChkZWxheSAhPSAwKQotCQkJLyoKLQkJCSAqIHJlc2V0IHRpbWVyIHRvIGF2b2lkIHRpbWVzdGFtcCBvdmVyZmxvdyBwcm9ibGVtCi0JCQkgKiBhZnRlciBhYm91dCA2OCBtaW51dGVzIG9mIHVkZWxheSgpIHRpbWUuCi0JCQkgKi8KLQkJCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKLQkJCXNkZWxheSAoZGVsYXkpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1VX0JPT1RfQ01EKAotCXRsb2csCTIsCTEsCWRvX3RlbXBfbG9nLAotCSJsb2cgY29udGFjdCB0ZW1wZXJhdHVyZSBbMS8xMDAgQ10gdG8gY29uc29sZSAoZW5kbGVzc2x5KSIsCi0JImRlbGF5XG4iCi0JIiAgICAtIGNvbnRhY3QgdGVtcGVyYXR1cmUgWzEvMTAwIENdIGlzIHByaW50ZWQgZW5kbGVzc2x5IHRvIGNvbnNvbGVcbiIKLQkiICAgICAgPGRlbGF5PiBzcGVjaWZpZXMgdGhlIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIHR3byBtZWFzdXJlbWVudHNcbiIKLQkiICAgICAgRm9yIGVhY2ggbWVhc3VybWVudCBhIHRpbWVzdGFtcCBpcyBwcmludGV0ZWQiCi0pOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvY29uZmlnLm1rIGIvYm9hcmQvdHJhYi9jb25maWcubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2N2YwYjcuLjAwMDAwMDAKLS0tIGEvYm9hcmQvdHJhYi9jb25maWcubWsKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIChDKSBDb3B5cmlnaHQgMjAwMgotIyBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdhcnlqQGRlbnguZGU+Ci0jCi0jIFRSQUIgYm9hcmQgd2l0aCBTM0MyNDAwWCAoYXJtOTIwdCkgY3B1Ci0jCi0jIHNlZSBodHRwOi8vd3d3LnNhbXN1bmcuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTQU1TVU5HCi0jCi0KLSMKLSMgVFJBQiBoYXMgMSBiYW5rIG9mIDE2IE1CIG9yIDMyIE1CIERSQU0KLSMKLSMgMGMwMCcwMDAwIHRvIDBlMDAnMDAwMAotIwotIyBMaW51eC1LZXJuZWwgaXMgZXhwZWN0ZWQgdG8gYmUgYXQgMGMwMCc4MDAwLCBlbnRyeSAwYzAwJzgwMDAKLSMKLSMgd2UgbG9hZCBvdXJzZWxmIHRvIDBDRjAnMDAwMAkvIDBERjAnMDAwMAotIwotIyBkb3dubG9hZCBhcmVhcyBpcyAwQzgwJzAwMDAKLSMKLQotc2luY2x1ZGUgJChPQkpUUkVFKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCi0KLWlmbmRlZiBDT05GSUdfU1lTX1RFWFRfQkFTRQotQ09ORklHX1NZU19URVhUX0JBU0UgPSAweDBERjQwMDAwCi1lbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9mbGFzaC5jIGIvYm9hcmQvdHJhYi9mbGFzaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTg5YzQxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3RyYWIvZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDU2OSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdhcnlqQGRlbnguZGU+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyogI2RlZmluZSBERUJVRyAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8ZW52aXJvbm1lbnQuaD4KLQotc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOwotCi1mbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LU107Ci0KLQotI2RlZmluZSBDTURfUkVBRF9BUlJBWQkJMHgwMEYwMDBGMAotI2RlZmluZSBDTURfVU5MT0NLMQkJMHgwMEFBMDBBQQotI2RlZmluZSBDTURfVU5MT0NLMgkJMHgwMDU1MDA1NQotI2RlZmluZSBDTURfRVJBU0VfU0VUVVAJCTB4MDA4MDAwODAKLSNkZWZpbmUgQ01EX0VSQVNFX0NPTkZJUk0JMHgwMDMwMDAzMAotI2RlZmluZSBDTURfUFJPR1JBTQkJMHgwMEEwMDBBMAotI2RlZmluZSBDTURfVU5MT0NLX0JZUEFTUwkweDAwMjAwMDIwCi0jZGVmaW5lIENNRF9SRUFEX01BTkZfSUQJMHgwMDkwMDA5MAotI2RlZmluZSBDTURfVU5MT0NLX0JZUEFTU19SRVMxCTB4MDA5MDAwOTAKLSNkZWZpbmUgQ01EX1VOTE9DS19CWVBBU1NfUkVTMgkweDAwMDAwMDAwCi0KLSNkZWZpbmUgTUVNX0ZMQVNIX0FERFIJCSgqKHZvbGF0aWxlIHUzMiAqKUNPTkZJR19TWVNfRkxBU0hfQkFTRSkKLSNkZWZpbmUgTUVNX0ZMQVNIX0FERFIxCQkoKih2b2xhdGlsZSB1MzIgKikoQ09ORklHX1NZU19GTEFTSF9CQVNFICsgKDB4MDAwMDA1NTUgPDwgMikpKQotI2RlZmluZSBNRU1fRkxBU0hfQUREUjIJCSgqKHZvbGF0aWxlIHUzMiAqKShDT05GSUdfU1lTX0ZMQVNIX0JBU0UgKyAoMHgwMDAwMDJBQSA8PCAyKSkpCi0KLSNkZWZpbmUgQklUX0VSQVNFX0RPTkUJCTB4MDA4MDAwODAKLSNkZWZpbmUgQklUX1JEWV9NQVNLCQkweDAwODAwMDgwCi0jZGVmaW5lIEJJVF9QUk9HUkFNX0VSUk9SCTB4MDAyMDAwMjAKLSNkZWZpbmUgQklUX1RJTUVPVVQJCTB4ODAwMDAwMDAJLyogb3VyIGZsYWcgKi8KLQotI2RlZmluZSBSRUFEWSAxCi0jZGVmaW5lIEVSUiAgIDIKLSNkZWZpbmUgVE1PICAgNAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotdWxvbmcgZmxhc2hfaW5pdCAodm9pZCkKLXsKLQlpbnQgaSwgajsKLQl1bG9uZyBzaXplID0gMDsKLQotCWZvciAoaT0wOyBpPENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKLQkJdWxvbmcgZmxhc2hiYXNlID0gMDsKLQkJZmxhc2hfaW5mb190ICppbmZvID0gJmZsYXNoX2luZm9baV07Ci0KLQkJLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0KLQkJc2l6ZSArPSBmbGFzaF9nZXRfc2l6ZSAoQ09ORklHX1NZU19GTEFTSF9CQVNFLCBpbmZvKTsKLQotCQlpZiAoaSA9PSAwKQotCQkJZmxhc2hiYXNlID0gQ09ORklHX1NZU19GTEFTSF9CQVNFOwotCQllbHNlCi0JCQlwYW5pYyAoImNvbmZpZ3VyZWQgdG9vIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKLQkJZm9yIChqID0gMDsgaiA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaisrKSB7Ci0KLQkJCWluZm8tPnByb3RlY3Rbal0gPSAwOwotCQkJaW5mby0+c3RhcnRbal0gPSBmbGFzaGJhc2U7Ci0KLQkJCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotCQkJY2FzZSAoRkxBU0hfQU0zMjBCICYgRkxBU0hfVFlQRU1BU0spOgotCQkJY2FzZSAoRkxBU0hfTVhMVjMyMEIgJiBGTEFTSF9UWVBFTUFTSyk6Ci0JCQkJLyogQm9vdCBzZWN0b3IgdHlwZTogOCB4IDggKyBOIHggMTI4IGtCICovCi0JCQkJZmxhc2hiYXNlICs9IChqIDwgOCkgPyAweDQwMDAgOiAweDIwMDAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSAoRkxBU0hfQU02NDBVICYgRkxBU0hfVFlQRU1BU0spOgotCQkJCS8qIFVuaWZvcm0gc2VjdG9yIHR5cGU6IDEyOCBrQiAqLwotCQkJCWZsYXNoYmFzZSArPSAweDIwMDAwOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGYgKCIjIyBCYWQgZmxhc2ggY2hpcCB0eXBlIDB4JTA0bFhcbiIsCi0JCQkJCWluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spOwotCQkJfQotCQl9Ci0JfQotCi0JLyoKLQkgKiBQcm90ZWN0IG1vbml0b3IgYW5kIGVudmlyb25tZW50IHNlY3RvcnMKLQkgKi8KLQlmbGFzaF9wcm90ZWN0ICggRkxBR19QUk9URUNUX1NFVCwKLQkJCUNPTkZJR19TWVNfRkxBU0hfQkFTRSwKLQkJCUNPTkZJR19TWVNfRkxBU0hfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKLQkJCSZmbGFzaF9pbmZvWzBdKTsKLQotCWZsYXNoX3Byb3RlY3QgKCBGTEFHX1BST1RFQ1RfU0VULAotCQkJQ09ORklHX0VOVl9BRERSLAotCQkJQ09ORklHX0VOVl9BRERSICsgQ09ORklHX0VOVl9TRUNUX1NJWkUgLSAxLCAmZmxhc2hfaW5mb1swXSk7Ci0KLSNpZmRlZiBDT05GSUdfRU5WX0FERFJfUkVEVU5ECi0JZmxhc2hfcHJvdGVjdCAoIEZMQUdfUFJPVEVDVF9TRVQsCi0JCQlDT05GSUdfRU5WX0FERFJfUkVEVU5ELAotCQkJQ09ORklHX0VOVl9BRERSX1JFRFVORCArIENPTkZJR19FTlZfU0VDVF9TSVpFIC0gMSwKLQkJCSZmbGFzaF9pbmZvWzBdKTsKLSNlbmRpZgotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotdm9pZCBmbGFzaF9wcmludF9pbmZvIChmbGFzaF9pbmZvX3QgKiBpbmZvKQotewotCWludCBpOwotCi0Jc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7Ci0JY2FzZSAoRkxBU0hfTUFOX0FNRCAmIEZMQVNIX1ZFTkRNQVNLKToKLQkJCXByaW50ZiAoIkFNRCAiKTsJCWJyZWFrOwotCWNhc2UgKEZMQVNIX01BTl9GVUogJiBGTEFTSF9WRU5ETUFTSyk6Ci0JCQlwcmludGYgKCJGVUpJVFNVICIpOwkJYnJlYWs7Ci0JY2FzZSAoRkxBU0hfTUFOX01YICAmIEZMQVNIX1ZFTkRNQVNLKToKLQkJCXByaW50ZiAoIk1BQ1JPTklYICIpOwkJYnJlYWs7Ci0JZGVmYXVsdDoJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CWJyZWFrOwotCX0KLQotCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotCWNhc2UgKEZMQVNIX0FNMzIwQiAmIEZMQVNIX1RZUEVNQVNLKToKLQkJcHJpbnRmICgiMnggQW0yOUxWMzIwREIgKDMyTWJpdClcbiIpOwotCQlicmVhazsKLQljYXNlIChGTEFTSF9NWExWMzIwQiAmIEZMQVNIX1RZUEVNQVNLKToKLQkJcHJpbnRmICgiMnggTVgyOUxWMzIwREIgKDMyTWJpdClcbiIpOwotCQlicmVhazsKLQljYXNlIChGTEFTSF9BTTY0MFUgJiBGTEFTSF9UWVBFTUFTSyk6Ci0JCXByaW50ZiAoIjJ4IEFtMjlMVjY0MEQgKDY0TWJpdClcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7Ci0JCWdvdG8gRG9uZTsKLQkJYnJlYWs7Ci0JfQotCi0JcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKLQkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7Ci0KLQlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0JZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCWlmICgoaSAlIDUpID09IDApIHsKLQkJCXByaW50ZiAoIlxuICAgIik7Ci0JCX0KLQkJcHJpbnRmICgiICUwOGxYJXMiLAotCQkJaW5mby0+c3RhcnRbaV0sCi0JCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOwotCX0KLQlwcmludGYgKCJcbiIpOwotCi1Eb25lOgk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1pbnQgZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQotewotCXVsb25nIHJlc3VsdDsKLQotI2lmIDAKLQlpbnQgY2ZsYWc7Ci0jZW5kaWYKLQlpbnQgaWZsYWcsIHByb3QsIHNlY3Q7Ci0JaW50IHJjID0gRVJSX09LOwotCWludCBjaGlwMSwgY2hpcDI7Ci0KLQlkZWJ1ZyAoImZsYXNoX2VyYXNlOiBzX2ZpcnN0ICVkICBzX2xhc3QgJWRcbiIsIHNfZmlyc3QsIHNfbGFzdCk7Ci0KLQkvKiBmaXJzdCBsb29rIGZvciBwcm90ZWN0aW9uIGJpdHMgKi8KLQotCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQotCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVFlQRTsKLQotCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotCQlyZXR1cm4gRVJSX0lOVkFMOwotCX0KLQotCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewotCWNhc2UgKEZMQVNIX01BTl9BTUQgJiBGTEFTSF9WRU5ETUFTSyk6CWJyZWFrOwkvKiBPSyAqLwotCWNhc2UgKEZMQVNIX01BTl9GVUogJiBGTEFTSF9WRU5ETUFTSyk6CWJyZWFrOwkvKiBPSyAqLwotCWNhc2UgKEZMQVNIX01BTl9NWCAgJiBGTEFTSF9WRU5ETUFTSyk6CWJyZWFrOwkvKiBPSyAqLwotCWRlZmF1bHQ6Ci0JCWRlYnVnICgiIyMgZmxhc2hfZXJhc2U6IHVua25vd24gbWFudWZhY3R1cmVyXG4iKTsKLQkJcmV0dXJuIChFUlJfVU5LTk9XTl9GTEFTSF9WRU5ET1IpOwotCX0KLQotCXByb3QgPSAwOwotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKLQkJCXByb3QrKzsKLQkJfQotCX0KLQotCWlmIChwcm90KSB7Ci0JCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKLQkJCXByb3QpOwotCX0gZWxzZSB7Ci0JCXByaW50ZiAoIlxuIik7Ci0JfQotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0Ci0JICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCi0JICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQotCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCi0JICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgotCSAqLwotI2lmIDAKLQljZmxhZyA9IGljYWNoZV9zdGF0dXMgKCk7Ci0JaWNhY2hlX2Rpc2FibGUgKCk7Ci0jZW5kaWYKLQlpZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKLQotCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdCAmJiAhY3RybGMgKCk7IHNlY3QrKykgewotCi0JCWRlYnVnICgiRXJhc2luZyBzZWN0b3IgJTJkIEAgJTA4bFguLi4gIiwKLQkJCXNlY3QsIGluZm8tPnN0YXJ0W3NlY3RdKTsKLQotCQkvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLwotCQlyZXNldF90aW1lcl9tYXNrZWQgKCk7Ci0KLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCi0JCQl2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKikgKGluZm8tPnN0YXJ0W3NlY3RdKTsKLQotCQkJTUVNX0ZMQVNIX0FERFIxID0gQ01EX1VOTE9DSzE7Ci0JCQlNRU1fRkxBU0hfQUREUjIgPSBDTURfVU5MT0NLMjsKLQkJCU1FTV9GTEFTSF9BRERSMSA9IENNRF9FUkFTRV9TRVRVUDsKLQotCQkJTUVNX0ZMQVNIX0FERFIxID0gQ01EX1VOTE9DSzE7Ci0JCQlNRU1fRkxBU0hfQUREUjIgPSBDTURfVU5MT0NLMjsKLQkJCSphZGRyID0gQ01EX0VSQVNFX0NPTkZJUk07Ci0KLQkJCS8qIHdhaXQgdW50aWwgZmxhc2ggaXMgcmVhZHkgKi8KLQkJCWNoaXAxID0gY2hpcDIgPSAwOwotCi0JCQlkbyB7Ci0JCQkJcmVzdWx0ID0gKmFkZHI7Ci0KLQkJCQkvKiBjaGVjayB0aW1lb3V0ICovCi0JCQkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPiBDT05GSUdfU1lTX0ZMQVNIX0VSQVNFX1RPVVQpIHsKLQkJCQkJTUVNX0ZMQVNIX0FERFIxID0gQ01EX1JFQURfQVJSQVk7Ci0JCQkJCWNoaXAxID0gVE1POwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlpZiAoIWNoaXAxICYmIChyZXN1bHQgJiAweEZGRkYpICYgQklUX0VSQVNFX0RPTkUpCi0JCQkJCWNoaXAxID0gUkVBRFk7Ci0KLQkJCQlpZiAoIWNoaXAxICYmIChyZXN1bHQgJiAweEZGRkYpICYgQklUX1BST0dSQU1fRVJST1IpCi0JCQkJCWNoaXAxID0gRVJSOwotCi0JCQkJaWYgKCFjaGlwMiAmJiAocmVzdWx0ID4+IDE2KSAmIEJJVF9FUkFTRV9ET05FKQotCQkJCQljaGlwMiA9IFJFQURZOwotCi0JCQkJaWYgKCFjaGlwMiAmJiAocmVzdWx0ID4+IDE2KSAmIEJJVF9QUk9HUkFNX0VSUk9SKQotCQkJCQljaGlwMiA9IEVSUjsKLQotCQkJfSB3aGlsZSAoIWNoaXAxIHx8ICFjaGlwMik7Ci0KLQkJCU1FTV9GTEFTSF9BRERSMSA9IENNRF9SRUFEX0FSUkFZOwotCi0JCQlpZiAoY2hpcDEgPT0gRVJSIHx8IGNoaXAyID09IEVSUikgewotCQkJCXJjID0gRVJSX1BST0dfRVJST1I7Ci0JCQkJcHJpbnRmICgiRmxhc2ggZXJhc2UgZXJyb3JcbiIpOwotCQkJCWdvdG8gb3V0YWhlcmU7Ci0JCQl9Ci0JCQlpZiAoY2hpcDEgPT0gVE1PKSB7Ci0JCQkJcmMgPSBFUlJfVElNT1VUOwotCQkJCXByaW50ZiAoIkZsYXNoIGVyYXNlIHRpbWVvdXQgZXJyb3JcbiIpOwotCQkJCWdvdG8gb3V0YWhlcmU7Ci0JCQl9Ci0JCX0KLQl9Ci0KLW91dGFoZXJlOgotCS8qIGFsbG93IGZsYXNoIHRvIHNldHRsZSAtIHdhaXQgMTAgbXMgKi8KLQl1ZGVsYXlfbWFza2VkICgxMDAwMCk7Ci0KLQlpZiAoaWZsYWcpCi0JCWVuYWJsZV9pbnRlcnJ1cHRzICgpOwotCi0jaWYgMAotCWlmIChjZmxhZykKLQkJaWNhY2hlX2VuYWJsZSAoKTsKLSNlbmRpZgotCXJldHVybiByYzsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2gKLSAqLwotCi1zdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCi17Ci0JdnVfbG9uZyAqYWRkciA9ICh2dV9sb25nICopIGRlc3Q7Ci0JdWxvbmcgcmVzdWx0OwotCWludCByYyA9IEVSUl9PSzsKLQotI2lmIDAKLQlpbnQgY2ZsYWc7Ci0jZW5kaWYKLQlpbnQgaWZsYWc7Ci0JaW50IGNoaXAxLCBjaGlwMjsKLQotCS8qCi0JICogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkCi0JICovCi0JcmVzdWx0ID0gKmFkZHI7Ci0JaWYgKChyZXN1bHQgJiBkYXRhKSAhPSBkYXRhKQotCQlyZXR1cm4gRVJSX05PVF9FUkFTRUQ7Ci0KLQkvKgotCSAqIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQKLQkgKiBoZXJlLiBSZW1lbWJlciB0aGF0IG91ciBleGNlcHRpb24gdmVjdG9ycyBhcmUKLQkgKiBhdCBhZGRyZXNzIDAgaW4gdGhlIGZsYXNoLCBhbmQgd2UgZG9uJ3Qgd2FudCBhCi0JICogKHRpY2tlcikgZXhjZXB0aW9uIHRvIGhhcHBlbiB3aGlsZSB0aGUgZmxhc2gKLQkgKiBjaGlwIGlzIGluIHByb2dyYW1taW5nIG1vZGUuCi0JICovCi0jaWYgMAotCWNmbGFnID0gaWNhY2hlX3N0YXR1cyAoKTsKLQlpY2FjaGVfZGlzYWJsZSAoKTsKLSNlbmRpZgotCWlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOwotCi0JTUVNX0ZMQVNIX0FERFIxID0gQ01EX1VOTE9DSzE7Ci0JTUVNX0ZMQVNIX0FERFIyID0gQ01EX1VOTE9DSzI7Ci0JTUVNX0ZMQVNIX0FERFIxID0gQ01EX1BST0dSQU07Ci0JKmFkZHIgPSBkYXRhOwotCi0JLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KLQlyZXNldF90aW1lcl9tYXNrZWQgKCk7Ci0KLQkvKiB3YWl0IHVudGlsIGZsYXNoIGlzIHJlYWR5ICovCi0JY2hpcDEgPSBjaGlwMiA9IDA7Ci0JZG8gewotCQlyZXN1bHQgPSAqYWRkcjsKLQotCQkvKiBjaGVjayB0aW1lb3V0ICovCi0JCWlmIChnZXRfdGltZXJfbWFza2VkICgpID4gQ09ORklHX1NZU19GTEFTSF9XUklURV9UT1VUKSB7Ci0JCQljaGlwMSA9IEVSUiB8IFRNTzsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghY2hpcDEgJiYgKChyZXN1bHQgJiAweDgwKSA9PSAoZGF0YSAmIDB4ODApKSkKLQkJCWNoaXAxID0gUkVBRFk7Ci0KLQkJaWYgKCFjaGlwMSAmJiAoKHJlc3VsdCAmIDB4RkZGRikgJiBCSVRfUFJPR1JBTV9FUlJPUikpIHsKLQkJCXJlc3VsdCA9ICphZGRyOwotCi0JCQlpZiAoKHJlc3VsdCAmIDB4ODApID09IChkYXRhICYgMHg4MCkpCi0JCQkJY2hpcDEgPSBSRUFEWTsKLQkJCWVsc2UKLQkJCQljaGlwMSA9IEVSUjsKLQkJfQotCi0JCWlmICghY2hpcDIgJiYgKChyZXN1bHQgJiAoMHg4MCA8PCAxNikpID09IChkYXRhICYgKDB4ODAgPDwgMTYpKSkpCi0JCQljaGlwMiA9IFJFQURZOwotCi0JCWlmICghY2hpcDIgJiYgKChyZXN1bHQgPj4gMTYpICYgQklUX1BST0dSQU1fRVJST1IpKSB7Ci0JCQlyZXN1bHQgPSAqYWRkcjsKLQotCQkJaWYgKChyZXN1bHQgJiAoMHg4MCA8PCAxNikpID09IChkYXRhICYgKDB4ODAgPDwgMTYpKSkKLQkJCQljaGlwMiA9IFJFQURZOwotCQkJZWxzZQotCQkJCWNoaXAyID0gRVJSOwotCQl9Ci0KLQl9IHdoaWxlICghY2hpcDEgfHwgIWNoaXAyKTsKLQotCSphZGRyID0gQ01EX1JFQURfQVJSQVk7Ci0KLQlpZiAoY2hpcDEgPT0gRVJSIHx8IGNoaXAyID09IEVSUiB8fCAqYWRkciAhPSBkYXRhKSB7Ci0JCXJjID0gRVJSX1BST0dfRVJST1I7Ci0JCXByaW50ZiAoIkZsYXNoIHByb2dyYW0gZXJyb3JcbiIpOwotCQlkZWJ1ZyAoImNoaXAxOiAlI3gsIGNoaXAyOiAlI3gsIGFkZHI6ICUjbHggKmFkZHI6ICUjbHgsICIKLQkJICAgICAgICJkYXRhOiAlI2x4XG4iLAotCQkgICAgICAgY2hpcDEsIGNoaXAyLCBhZGRyLCAqYWRkciwgZGF0YSk7Ci0JfQotCi0JaWYgKGlmbGFnKQotCQllbmFibGVfaW50ZXJydXB0cyAoKTsKLQotI2lmIDAKLQlpZiAoY2ZsYWcpCi0JCWljYWNoZV9lbmFibGUgKCk7Ci0jZW5kaWYKLQotCXJldHVybiByYzsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ29weSBtZW1vcnkgdG8gZmxhc2guCi0gKi8KLQotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JdWxvbmcgY3AsIHdwLCBkYXRhOwotCWludCBsOwotCWludCBpLCByYzsKLQotCXdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0JICovCi0JaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWRhdGEgPSAwOwotCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgbDsgKytpLCArK2NwKSB7Ci0JCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKSBjcCA8PCAyNCk7Ci0JCX0KLQkJZm9yICg7IGkgPCA0ICYmIGNudCA+IDA7ICsraSkgewotCQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCpzcmMrKyA8PCAyNCk7Ci0JCQktLWNudDsKLQkJCSsrY3A7Ci0JCX0KLQkJZm9yICg7IGNudCA9PSAwICYmIGkgPCA0OyArK2ksICsrY3ApIHsKLQkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopIGNwIDw8IDI0KTsKLQkJfQotCi0JCWlmICgocmMgPSB3cml0ZV93b3JkIChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJCWdvdG8gRG9uZTsKLQkJfQotCQl3cCArPSA0OwotCX0KLQotCS8qCi0JICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0Ci0JICovCi0Jd2hpbGUgKGNudCA+PSA0KSB7Ci0JCWlmICgoKHVsb25nKXNyYykgJiAweDMpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCQkoKGNoYXIgKikmZGF0YSlbaV0gPSAoKHZ1X2NoYXIgKilzcmMpW2ldOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJZGF0YSA9ICooKHZ1X2xvbmcgKikgc3JjKTsKLQkJfQotCi0JCWlmICgocmMgPSB3cml0ZV93b3JkIChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJCWdvdG8gRG9uZTsKLQkJfQotCQlzcmMgKz0gNDsKLQkJd3AgKz0gNDsKLQkJY250IC09IDQ7Ci0JfQotCi0JaWYgKGNudCA9PSAwKSB7Ci0JCXJjID0gRVJSX09LOwotCQlnb3RvIERvbmU7Ci0JfQotCi0JLyoKLQkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKLQkgKi8KLQlkYXRhID0gMDsKLQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgNCAmJiBjbnQgPiAwOyArK2ksICsrY3ApIHsKLQkJZGF0YSA9IChkYXRhID4+IDgpIHwgKCpzcmMrKyA8PCAyNCk7Ci0JCS0tY250OwotCX0KLQlmb3IgKDsgaSA8IDQ7ICsraSwgKytjcCkgewotCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKSBjcCA8PCAyNCk7Ci0JfQotCi0JcmMgPSB3cml0ZV93b3JkIChpbmZvLCB3cCwgZGF0YSk7Ci0KLQlEb25lOgotCi0JcmV0dXJuIChyYyk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1zdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKHZ1X2xvbmcgKmFkZHIsIGZsYXNoX2luZm9fdCAqaW5mbykKLXsKLQl1bG9uZyB2YWx1ZTsKLQotCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQgc2VxdWVuY2UgYW5kIHJlYWQgTWFudWZhY3R1cmVyIElEICovCi0JYWRkclsweDA1NTVdID0gQ01EX1VOTE9DSzE7Ci0JYWRkclsweDAyQUFdID0gQ01EX1VOTE9DSzI7Ci0JYWRkclsweDA1NTVdID0gQ01EX1JFQURfTUFORl9JRDsKLQotCXZhbHVlID0gYWRkclswXTsKLQotCWRlYnVnICgiTWFudWYuIElEIEAgMHglMDhseDogMHglMDhseFxuIiwgKHVsb25nKWFkZHIsIHZhbHVlKTsKLQotCXN3aXRjaCAodmFsdWUpIHsKLQljYXNlIEFNRF9NQU5VRkFDVDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOwotCQlicmVhazsKLQljYXNlIEZVSl9NQU5VRkFDVDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fRlVKOwotCQlicmVhazsKLQljYXNlIE1YX01BTlVGQUNUOgotCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9NWDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCQlpbmZvLT5zZWN0b3JfY291bnQgPSAwOwotCQlpbmZvLT5zaXplID0gMDsKLQkJYWRkclswXSA9IENNRF9SRUFEX0FSUkFZOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwotCQlkZWJ1ZyAoIiMjIGZsYXNoX2luaXQ6IHVua25vd24gbWFudWZhY3R1cmVyXG4iKTsKLQkJcmV0dXJuICgwKTsJCQkvKiBubyBvciB1bmtub3duIGZsYXNoCSovCi0JfQotCi0JdmFsdWUgPSBhZGRyWzFdOwkJCS8qIGRldmljZSBJRAkJKi8KLQotCWRlYnVnICgiRGV2aWNlIElEIEAgMHglMDhseDogMHglMDhseFxuIiwgKHVsb25nKSgmYWRkclsxXSksIHZhbHVlKTsKLQotCXN3aXRjaCAodmFsdWUpIHsKLQljYXNlIEFNRF9JRF9MVjMyMEI6Ci0JCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMzIwQjsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7Ci0JCWluZm8tPnNpemUgPSAweDAwODAwMDAwOwotCi0JCWFkZHJbMF0gPSBDTURfUkVBRF9BUlJBWTsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KLQkJYnJlYWs7CQkJCS8qID0+ICA4IE1CCQkqLwotCi0JY2FzZSBBTURfSURfTFY2NDBVOgotCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTY0MFU7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDEyODsKLQkJaW5mby0+c2l6ZSA9IDB4MDEwMDAwMDA7Ci0KLQkJYWRkclswXSA9IENNRF9SRUFEX0FSUkFZOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwotCQlicmVhazsJCQkJLyogPT4gMTYgTUIJCSovCi0KLQljYXNlIE1YX0lEX0xWMzIwQjoKLQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfTVhMVjMyMEI7Ci0JCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOwotCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwMDsKLQotCQlhZGRyWzBdID0gQ01EX1JFQURfQVJSQVk7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0JCWJyZWFrOwkJCQkvKiA9PiAgOCBNQgkJKi8KLQotCWRlZmF1bHQ6Ci0JCWRlYnVnICgiIyMgZmxhc2hfaW5pdDogdW5rbm93biBmbGFzaCBjaGlwXG4iKTsKLQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotCQlhZGRyWzBdID0gQ01EX1JFQURfQVJSQVk7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0JCXJldHVybiAoMCk7CQkJLyogPT4gbm8gb3IgdW5rbm93biBmbGFzaCAqLwotCi0JfQotCi0JaWYgKGluZm8tPnNlY3Rvcl9jb3VudCA+IENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QpIHsKLQkJcHJpbnRmICgiKiogRVJST1I6IHNlY3RvciBjb3VudCAlZCA+IG1heCAoJWQpICoqXG4iLAotCQkJaW5mby0+c2VjdG9yX2NvdW50LCBDT05GSUdfU1lTX01BWF9GTEFTSF9TRUNUKTsKLQkJaW5mby0+c2VjdG9yX2NvdW50ID0gQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVDsKLQl9Ci0KLQlyZXR1cm4gKGluZm8tPnNpemUpOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC90cmFiL2xvd2xldmVsX2luaXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NlZjQxNC4uMDAwMDAwMAotLS0gYS9ib2FyZC90cmFiL2xvd2xldmVsX2luaXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKgotICogTWVtb3J5IFNldHVwIHN0dWZmIC0gdGFrZW4gZnJvbSBibG9iIG1lbXNldHVwLlMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgMjAwMCAyMDAxIEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCkgYW5kCi0gKiAgICAgICAgICAgICAgICAgICAgIEphbi1EZXJrIEJha2tlciAoSi5ELkJha2tlckBpdHMudHVkZWxmdC5ubCkKLSAqCi0gKiBNb2RpZmllZCBmb3IgdGhlIFRSQUIgYm9hcmQgYnkKLSAqIChDKSBDb3B5cmlnaHQgMjAwMi0yMDAzCi0gKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdhcnlqQGRlbnguZGU+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jaW5jbHVkZSA8dmVyc2lvbi5oPgotCi0KLS8qIHNvbWUgcGFyYW1ldGVycyBmb3IgdGhlIGJvYXJkICovCi0KLS8qCi0gKgotICogQ29waWVkIGZyb20gbGludXgvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtczNjMjQwMC5TCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIFNhbXN1bmcgRWxlY3Ryb25pY3MgYnkgY2hjLCAwMTA0MDYKLSAqCi0gKiBUUkFCIHNwZWNpZmljIHR3ZWFrcy4KLSAqCi0gKi8KLQotLyogbWVtb3J5IGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgQldTQ09OIDB4MTQwMDAwMDAKLQotLyogQmFuazAgKi8KLSNkZWZpbmUgQjBfVGFjcwkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjBfVGNvcwkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjBfVGFjYwkweDUJLyogOCBjbGsgKi8KLSNkZWZpbmUgQjBfVGNvaAkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjBfVGFoCTB4MQkvKiAxIGNsayAqLwotI2RlZmluZSBCMF9UYWNwCTB4MAotI2RlZmluZSBCMF9QTUMJMHgwCS8qIG5vcm1hbCAqLwotCi0vKiBCYW5rMSAtIFNSQU0gKi8KLSNkZWZpbmUgQjFfVGFjcwkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjFfVGNvcwkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjFfVGFjYwkweDUJLyogOCBjbGsgKi8KLSNkZWZpbmUgQjFfVGNvaAkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjFfVGFoCTB4MQkvKiAxIGNsayAqLwotI2RlZmluZSBCMV9UYWNwCTB4MAotI2RlZmluZSBCMV9QTUMJMHgwCS8qIG5vcm1hbCAqLwotCi0vKiBCYW5rMiAtIENQTEQgKi8KLSNkZWZpbmUgQjJfVGFjcwkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjJfVGNvcwkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjJfVGFjYwkweDUJLyogOCBjbGsgKi8KLSNkZWZpbmUgQjJfVGNvaAkweDEJLyogMSBjbGsgKi8KLSNkZWZpbmUgQjJfVGFoCTB4MQkvKiAxIGNsayAqLwotI2RlZmluZSBCMl9UYWNwCTB4MAotI2RlZmluZSBCMl9QTUMJMHgwCS8qIG5vcm1hbCAqLwotCi0vKiBCYW5rMyAtIHNldHVwIGZvciB0aGUgY3M4OTAwICovCi0jZGVmaW5lIEIzX1RhY3MJMHgzCS8qIDQgY2xrICovCi0jZGVmaW5lIEIzX1Rjb3MJMHgzCS8qIDQgY2xrICovCi0jZGVmaW5lIEIzX1RhY2MJMHg3CS8qIDE0IGNsayAqLwotI2RlZmluZSBCM19UY29oCTB4MQkvKiAxIGNsayAqLwotI2RlZmluZSBCM19UYWgJMHgwCS8qIDAgY2xrICovCi0jZGVmaW5lIEIzX1RhY3AJMHgzCS8qIDYgY2xrICovCi0jZGVmaW5lIEIzX1BNQwkweDAJLyogbm9ybWFsICovCi0KLS8qIEJhbms0ICovCi0jZGVmaW5lIEI0X1RhY3MJMHgwCS8qIDAgY2xrICovCi0jZGVmaW5lIEI0X1Rjb3MJMHgwCS8qIDAgY2xrICovCi0jZGVmaW5lIEI0X1RhY2MJMHg3CS8qIDE0IGNsayAqLwotI2RlZmluZSBCNF9UY29oCTB4MAkvKiAwIGNsayAqLwotI2RlZmluZSBCNF9UYWgJMHgwCS8qIDAgY2xrICovCi0jZGVmaW5lIEI0X1RhY3AJMHgwCi0jZGVmaW5lIEI0X1BNQwkweDAJLyogbm9ybWFsICovCi0KLS8qIEJhbms1ICovCi0jZGVmaW5lIEI1X1RhY3MJMHgwCS8qIDAgY2xrICovCi0jZGVmaW5lIEI1X1Rjb3MJMHgwCS8qIDAgY2xrICovCi0jZGVmaW5lIEI1X1RhY2MJMHg3CS8qIDE0IGNsayAqLwotI2RlZmluZSBCNV9UY29oCTB4MAkvKiAwIGNsayAqLwotI2RlZmluZSBCNV9UYWgJMHgwCS8qIDAgY2xrICovCi0jZGVmaW5lIEI1X1RhY3AJMHgwCi0jZGVmaW5lIEI1X1BNQwkweDAJLyogbm9ybWFsICovCi0KLSNpZm5kZWYgQ09ORklHX1JBTV8xNk1CCQkvKiAzMiBNQiBSQU0gKi8KLS8qIEJhbms2ICovCi0jZGVmaW5lCUI2X01UCTB4MwkvKiBTRFJBTSAqLwotI2RlZmluZQlCNl9UcmNkCTB4MAkvKiAyY2xrICovCi0jZGVmaW5lCUI2X1NDQU4JMHgxCS8qIDkgYml0ICovCi0KLS8qIEJhbms3ICovCi0jZGVmaW5lCUI3X01UCTB4MwkvKiBTRFJBTSAqLwotI2RlZmluZQlCN19UcmNkCTB4MAkvKiAyY2xrICovCi0jZGVmaW5lCUI3X1NDQU4JMHgxCS8qIDkgYml0ICovCi0jZWxzZQkvKiBDT05GSUdfUkFNXzE2TUIJPSAgMTYgTUIgUkFNICovCi0vKiBCYW5rNiAqLwotI2RlZmluZQlCNl9NVAkweDMJLyogU0RSQU0gKi8KLSNkZWZpbmUJQjZfVHJjZAkweDEJLyogMmNsayAqLwotI2RlZmluZQlCNl9TQ0FOCTB4MAkvKiA4IGJpdCAqLwotCi0vKiBCYW5rNyAqLwotI2RlZmluZQlCN19NVAkweDMJLyogU0RSQU0gKi8KLSNkZWZpbmUJQjdfVHJjZAkweDEJLyogMmNsayAqLwotI2RlZmluZQlCN19TQ0FOCTB4MAkvKiA4IGJpdCAqLwotI2VuZGlmCS8qIENPTkZJR19SQU1fMTZNQiAqLwotCi0vKiByZWZyZXNoIHBhcmFtZXRlciAqLwotI2RlZmluZSBSRUZFTgkweDEJLyogZW5hYmxlIHJlZnJlc2ggKi8KLSNkZWZpbmUgVFJFRk1ECTB4MAkvKiBDQlIoQ0FTIGJlZm9yZSBSQVMpL2F1dG8gcmVmcmVzaCAqLwotI2RlZmluZSBUcnAJMHgwCS8qIDIgY2xrICovCi0jZGVmaW5lIFRyYwkweDMJLyogNyBjbGsgKi8KLSNkZWZpbmUgVGNocgkweDIJLyogMyBjbGsgKi8KLQotI2lmZGVmIENPTkZJR19UUkFCXzUwTUhaCi0jZGVmaW5lIFJFRkNOVAkxMjY5CS8qIHBlcmlvZD0xNS42IHVzLCBIQ0xLPTUwTWh6LCAoMjA0OCsxLTE1LjYqNTApICovCi0jZWxzZQotI2RlZmluZSBSRUZDTlQJMTAxMQkvKiBwZXJpb2Q9MTUuNiB1cywgSENMSz02Ni41TWh6LCAoMjA0OCsxLTE1LjYqNjYuNSkgKi8KLSNlbmRpZgotCi0KLV9URVhUX0JBU0U6Ci0JLndvcmQJQ09ORklHX1NZU19URVhUX0JBU0UKLQotLmdsb2JsIGxvd2xldmVsX2luaXQKLWxvd2xldmVsX2luaXQ6Ci0JLyogbWVtb3J5IGNvbnRyb2wgY29uZmlndXJhdGlvbiAqLwotCS8qIG1ha2UgcjAgcmVsYXRpdmUgdGhlIGN1cnJlbnQgbG9jYXRpb24gc28gdGhhdCBpdCAqLwotCS8qIHJlYWRzIFNNUkRBVEEgb3V0IG9mIEZMQVNIIHJhdGhlciB0aGFuIG1lbW9yeSAhICovCi0JbGRyICAgICByMCwgPVNNUkRBVEEKLQlsZHIJcjEsIF9URVhUX0JBU0UKLQlzdWIJcjAsIHIwLCByMQotCWxkcglyMSwgPUJXU0NPTgkvKiBCdXMgV2lkdGggU3RhdHVzIENvbnRyb2xsZXIgKi8KLQlhZGQgICAgIHIyLCByMCwgIzUyCi0wOgotCWxkciAgICAgcjMsIFtyMF0sICM0Ci0Jc3RyICAgICByMywgW3IxXSwgIzQKLQljbXAgICAgIHIyLCByMAotCWJuZSAgICAgMGIKLQotCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSBub3cgKi8KLQltb3YJcGMsIGxyCi0KLQkubHRvcmcKLS8qIHRoZSBsaXRlcmFsIHBvb2xzIG9yaWdpbiAqLwotCi1TTVJEQVRBOgotCS53b3JkCTB4MjIxMWQ2NDQJLyogZC0+RXRoZXJuZXQsIDYtPkNQTEQsIDQtPlNSQU0sIDQtPkZMQVNIICovCi0JLndvcmQJKChCMF9UYWNzPDwxMykrKEIwX1Rjb3M8PDExKSsoQjBfVGFjYzw8OCkrKEIwX1Rjb2g8PDYpKyhCMF9UYWg8PDQpKyhCMF9UYWNwPDwyKSsoQjBfUE1DKSkgLyogR0NTMCAqLwotCS53b3JkCSgoQjFfVGFjczw8MTMpKyhCMV9UY29zPDwxMSkrKEIxX1RhY2M8PDgpKyhCMV9UY29oPDw2KSsoQjFfVGFoPDw0KSsoQjFfVGFjcDw8MikrKEIxX1BNQykpIC8qIEdDUzEgKi8KLQkud29yZAkoKEIyX1RhY3M8PDEzKSsoQjJfVGNvczw8MTEpKyhCMl9UYWNjPDw4KSsoQjJfVGNvaDw8NikrKEIyX1RhaDw8NCkrKEIyX1RhY3A8PDIpKyhCMl9QTUMpKSAvKiBHQ1MyICovCi0JLndvcmQJKChCM19UYWNzPDwxMykrKEIzX1Rjb3M8PDExKSsoQjNfVGFjYzw8OCkrKEIzX1Rjb2g8PDYpKyhCM19UYWg8PDQpKyhCM19UYWNwPDwyKSsoQjNfUE1DKSkgLyogR0NTMyAqLwotCS53b3JkCSgoQjRfVGFjczw8MTMpKyhCNF9UY29zPDwxMSkrKEI0X1RhY2M8PDgpKyhCNF9UY29oPDw2KSsoQjRfVGFoPDw0KSsoQjRfVGFjcDw8MikrKEI0X1BNQykpIC8qIEdDUzQgKi8KLQkud29yZAkoKEI1X1RhY3M8PDEzKSsoQjVfVGNvczw8MTEpKyhCNV9UYWNjPDw4KSsoQjVfVGNvaDw8NikrKEI1X1RhaDw8NCkrKEI1X1RhY3A8PDIpKyhCNV9QTUMpKSAvKiBHQ1M1ICovCi0JLndvcmQJKChCNl9NVDw8MTUpKyhCNl9UcmNkPDwyKSsoQjZfU0NBTikpIC8qIEdDUzYgKi8KLQkud29yZAkoKEI3X01UPDwxNSkrKEI3X1RyY2Q8PDIpKyhCN19TQ0FOKSkgLyogR0NTNyAqLwotCS53b3JkCSgoUkVGRU48PDIzKSsoVFJFRk1EPDwyMikrKFRycDw8MjApKyhUcmM8PDE4KSsoVGNocjw8MTYpK1JFRkNOVCkKLSNpZm5kZWYgQ09ORklHX1JBTV8xNk1CCQkvKiAzMiBNQiBSQU0gKi8KLQkud29yZAkweDEwCS8qIEJVU1dJRFRIPTMyLCBTQ0xLIHBvd2VyIHNhdmluZyBtb2RlLCBCQU5LU0laRSAzMk0vMzJNICovCi0jZWxzZQkvKiBDT05GSUdfUkFNXzE2TUIJPSAgMTYgTUIgUkFNICovCi0JLndvcmQJMHgxNwkvKiBCVVNXSURUSD0zMiwgU0NMSyBwb3dlciBzYXZpbmcgbW9kZSwgQkFOS1NJWkUgMTZNLzE2TSAqLwotI2VuZGlmCS8qIENPTkZJR19SQU1fMTZNQiAqLwotCS53b3JkCTB4MjAJLyogTVJTUjYsIENMPTJjbGsgKi8KLQkud29yZAkweDIwCS8qIE1SU1I3ICovCmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL21lbW9yeS5jIGIvYm9hcmQvdHJhYi9tZW1vcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk1YjY4ZS4uMDAwMDAwMAotLS0gYS9ib2FyZC90cmFiL21lbW9yeS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg2ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDItMjAwMwotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0KLS8qIE1lbW9yeSB0ZXN0Ci0gKgotICogR2VuZXJhbCBvYnNlcnZhdGlvbnM6Ci0gKiBvIFRoZSByZWNvbW1lbmRlZCB0ZXN0IHNlcXVlbmNlIGlzIHRvIHRlc3QgdGhlIGRhdGEgbGluZXM6IGlmIHRoZXkgYXJlCi0gKiAgIGJyb2tlbiwgbm90aGluZyBlbHNlIHdpbGwgd29yayBwcm9wZXJseS4gIFRoZW4gdGVzdCB0aGUgYWRkcmVzcwotICogICBsaW5lcy4gIEZpbmFsbHksIHRlc3QgdGhlIGNlbGxzIGluIHRoZSBtZW1vcnkgbm93IHRoYXQgdGhlIHRlc3QKLSAqICAgcHJvZ3JhbSBrbm93cyB0aGF0IHRoZSBhZGRyZXNzIGFuZCBkYXRhIGxpbmVzIHdvcmsgcHJvcGVybHkuCi0gKiAgIFRoaXMgc2VxdWVuY2UgYWxzbyBoZWxwcyBpc29sYXRlIGFuZCBpZGVudGlmeSB3aGF0IGlzIGZhdWx0eS4KLSAqCi0gKiBvIEZvciB0aGUgYWRkcmVzcyBsaW5lIHRlc3QsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZSB0aGUgYmFzZQotICogICBhZGRyZXNzIG9mIHRoZSBsb3dlc3QgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjYXVzZXMgYSAnMScgYml0IHRvCi0gKiAgIHdhbGsgdGhyb3VnaCBhIGZpZWxkIG9mIHplcm9zIG9uIHRoZSBhZGRyZXNzIGxpbmVzIGFuZCB0aGUgaGlnaGVzdAotICogICBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNhdXNlcyBhICcwJyBiaXQgdG8gd2FsayB0aHJvdWdoIGEgZmllbGQgb2YKLSAqICAgJzEncyBvbiB0aGUgYWRkcmVzcyBsaW5lLgotICoKLSAqIG8gRmxvYXRpbmcgYnVzZXMgY2FuIGZvb2wgbWVtb3J5IHRlc3RzIGlmIHRoZSB0ZXN0IHJvdXRpbmUgd3JpdGVzCi0gKiAgIGEgdmFsdWUgYW5kIHRoZW4gcmVhZHMgaXQgYmFjayBpbW1lZGlhdGVseS4gIFRoZSBwcm9ibGVtIGlzLCB0aGUKLSAqICAgd3JpdGUgd2lsbCBjaGFyZ2UgdGhlIHJlc2lkdWFsIGNhcGFjaXRhbmNlIG9uIHRoZSBkYXRhIGJ1cyBzbyB0aGUKLSAqICAgYnVzIHJldGFpbnMgaXRzIHN0YXRlIGJyaWVmZWx5LiAgV2hlbiB0aGUgdGVzdCBwcm9ncmFtIHJlYWRzIHRoZQotICogICB2YWx1ZSBiYWNrIGltbWVkaWF0ZWx5LCB0aGUgY2FwYWNpdGFuY2Ugb2YgdGhlIGJ1cyBjYW4gYWxsb3cgaXQKLSAqICAgdG8gcmVhZCBiYWNrIHdoYXQgd2FzIHdyaXR0ZW4sIGV2ZW4gdGhvdWdoIHRoZSBtZW1vcnkgY2lyY3VpdHJ5Ci0gKiAgIGlzIGJyb2tlbi4gIFRvIGF2b2lkIHRoaXMsIHRoZSB0ZXN0IHByb2dyYW0gc2hvdWxkIHdyaXRlIGEgdGVzdAotICogICBwYXR0ZXJuIHRvIHRoZSB0YXJnZXQgbG9jYXRpb24sIHdyaXRlIGEgZGlmZmVyZW50IHBhdHRlcm4gZWxzZXdoZXJlCi0gKiAgIHRvIGNoYXJnZSB0aGUgcmVzaWR1YWwgY2FwYWNpdGFuY2UgaW4gYSBkaWZmZXJudCBtYW5uZXIsIHRoZW4gcmVhZAotICogICB0aGUgdGFyZ2V0IGxvY2F0aW9uIGJhY2suCi0gKgotICogbyBBbHdheXMgcmVhZCB0aGUgdGFyZ2V0IGxvY2F0aW9uIEVYQUNUTFkgT05DRSBhbmQgc2F2ZSBpdCBpbiBhIGxvY2FsCi0gKiAgIHZhcmlhYmxlLiAgVGhlIHByb2JsZW0gd2l0aCByZWFkaW5nIHRoZSB0YXJnZXQgbG9jYXRpb24gbW9yZSB0aGFuCi0gKiAgIG9uY2UgaXMgdGhhdCB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IHJlYWRzIG1heSB3b3JrIHByb3Blcmx5LAotICogICByZXN1bHRpbmcgaW4gYSBmYWlsZWQgdGVzdCB0aGF0IHRlbGxzIHRoZSBwb29yIHRlY2huaWNpYW4gdGhhdAotICogICAiTWVtb3J5IGVycm9yIGF0IDAwMDAwMDAwLCB3cm90ZSBhYWFhYWFhYSwgcmVhZCBhYWFhYWFhYSIgd2hpY2gKLSAqICAgZG9lc24ndCBoZWxwIGhpbSBvbmUgYml0IGFuZCBjYXVzZXMgcHV6emxlZCBwaG9uZSBjYWxscy4gIEJlZW4gdGhlcmUsCi0gKiAgIGRvbmUgdGhhdC4KLSAqCi0gKiBEYXRhIGxpbmUgdGVzdDoKLSAqIC0tLS0tLS0tLS0tLS0tLQotICogVGhpcyB0ZXN0cyBkYXRhIGxpbmVzIGZvciBzaG9ydHMgYW5kIG9wZW5zIGJ5IGZvcmNpbmcgYWRqYWNlbnQgZGF0YQotICogdG8gb3Bwb3NpdGUgc3RhdGVzLiBCZWNhdXNlIHRoZSBkYXRhIGxpbmVzIGNvdWxkIGJlIHJvdXRlZCBpbiBhbgotICogYXJiaXRyYXJ5IG1hbm5lciB0aGUgbXVzdCBlbnN1cmUgdGVzdCBwYXR0ZXJucyBlbnN1cmUgdGhhdCBldmVyeSBjYXNlCi0gKiBpcyB0ZXN0ZWQuIEJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgc2VyaWVzIG9mIGJpbmFyeSBwYXR0ZXJucyBldmVyeQotICogY29tYmluYXRpb24gb2YgYWRqYWNlbnQgYml0cyBpcyB0ZXN0IHJlZ2FyZGxlc3Mgb2Ygcm91dGluZy4KLSAqCi0gKiAgICAgLi4uMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwCi0gKiAgICAgLi4uMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwCi0gKiAgICAgLi4uMTExMTAwMDAxMTExMDAwMDExMTEwMDAwCi0gKiAgICAgLi4uMTExMTExMTEwMDAwMDAwMDExMTExMTExCi0gKgotICogQ2FycnlpbmcgdGhpcyBvdXQsIGdpdmVzIHVzIHNpeCBoZXggcGF0dGVybnMgYXMgZm9sbG93czoKLSAqCi0gKiAgICAgMHhhYWFhYWFhYWFhYWFhYWFhCi0gKiAgICAgMHhjY2NjY2NjY2NjY2NjY2NjCi0gKiAgICAgMHhmMGYwZjBmMGYwZjBmMGYwCi0gKiAgICAgMHhmZjAwZmYwMGZmMDBmZjAwCi0gKiAgICAgMHhmZmZmMDAwMGZmZmYwMDAwCi0gKiAgICAgMHhmZmZmZmZmZjAwMDAwMDAwCi0gKgotICogVG8gdGVzdCBmb3Igc2hvcnQgYW5kIG9wZW5zIHRvIG90aGVyIHNpZ25hbHMgb24gb3VyIGJvYXJkcywgd2UKLSAqIHNpbXBseSB0ZXN0IHdpdGggdGhlIDEncyBjb21wbGVtbnQgb2YgdGhlIHBhdGVybnMgYXMgd2VsbCwgcmVzdWx0aW5nCi0gKiBpbiB0d2VsdmUgcGF0dGVybnMgdG90YWwuCi0gKgotICogQWZ0ZXIgd3JpdGluZyBhIHRlc3QgcGF0dGVybi4gYSBzcGVjaWFsIHBhdHRlcm4gMHgwMTIzNDU2Nzg5QUJDREVGIGlzCi0gKiB3cml0dGVuIHRvIGEgZGlmZmVyZW50IGFkZHJlc3MgaW4gY2FzZSB0aGUgZGF0YSBsaW5lcyBhcmUgZmxvYXRpbmcuCi0gKiBUaHVzLCBpZiBhIGJ5dGUgbGFuZSBmYWlscywgeW91IHdpbGwgc2VlIHBhcnQgb2YgdGhlIHNwZWNpYWwKLSAqIHBhdHRlcm4gaW4gdGhhdCBieXRlIGxhbmUgd2hlbiB0aGUgdGVzdCBydW5zLiAgRm9yIGV4YW1wbGUsIGlmIHRoZQotICogeHhfX3h4eHh4eHh4eHh4eCBieXRlIGxpbmUgZmFpbHMsIHlvdSB3aWxsIHNlZSBhYTIzYWFhYWFhYWFhYWFhCi0gKiAoZm9yIHRoZSAnYScgdGVzdCBwYXR0ZXJuKS4KLSAqCi0gKiBBZGRyZXNzIGxpbmUgdGVzdDoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLQotICogIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSB0ZXN0IHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgYWRkcmVzcyBsaW5lcwotICogIGhvb2tlZCB1cCB0byB0aGUgUkFNIHdvcmsgcHJvcGVybHkuICBJZiB0aGVyZSBpcyBhbiBhZGRyZXNzIGxpbmUKLSAqICBmYXVsdCwgaXQgdXN1YWxseSBzaG93cyB1cCBhcyB0d28gZGlmZmVyZW50IGxvY2F0aW9ucyBpbiB0aGUgYWRkcmVzcwotICogIG1hcCAocmVsYXRlZCBieSB0aGUgZmF1bHR5IGFkZHJlc3MgbGluZSkgbWFwcGluZyB0byBvbmUgcGh5c2ljYWwKLSAqICBtZW1vcnkgc3RvcmFnZSBsb2NhdGlvbi4gIFRoZSBhcnRpZmFjdCB0aGF0IHNob3dzIHVwIGlzIHdyaXRpbmcgdG8KLSAqICB0aGUgZmlyc3QgbG9jYXRpb24gImNoYW5nZXMiIHRoZSBzZWNvbmQgbG9jYXRpb24uCi0gKgotICogVG8gdGVzdCBhbGwgYWRkcmVzcyBsaW5lcywgd2Ugc3RhcnQgd2l0aCB0aGUgZ2l2ZW4gYmFzZSBhZGRyZXNzIGFuZAotICogeG9yIHRoZSBhZGRyZXNzIHdpdGggYSAnMScgYml0IHRvIGZsaXAgb25lIGFkZHJlc3MgbGluZS4gIEZvciBlYWNoCi0gKiB0ZXN0LCB3ZSBzaGlmdCB0aGUgJzEnIGJpdCBsZWZ0IHRvIHRlc3QgdGhlIG5leHQgYWRkcmVzcyBsaW5lLgotICoKLSAqIEluIHRoZSBhY3R1YWwgY29kZSwgd2Ugc3RhcnQgd2l0aCBhZGRyZXNzIHNpemVvZih1bG9uZykgc2luY2Ugb3VyCi0gKiB0ZXN0IHBhdHRlcm4gd2UgdXNlIGlzIGEgdWxvbmcgYW5kIHRodXMsIGlmIHdlIHRyaWVkIHRvIHRlc3QgbG93ZXIKLSAqIG9yZGVyIGFkZHJlc3MgYml0cywgaXQgd291bGRuJ3Qgd29yayBiZWNhdXNlIG91ciBwYXR0ZXJuIHdvdWxkCi0gKiBvdmVyd3JpdGUgaXRzZWxmLgotICoKLSAqIEV4YW1wbGUgZm9yIGEgNCBiaXQgYWRkcmVzcyBzcGFjZSB3aXRoIHRoZSBiYXNlIGF0IDAwMDA6Ci0gKiAgIDAwMDAgPC0gYmFzZQotICogICAwMDAxIDwtIHRlc3QgMQotICogICAwMDEwIDwtIHRlc3QgMgotICogICAwMTAwIDwtIHRlc3QgMwotICogICAxMDAwIDwtIHRlc3QgNAotICogRXhhbXBsZSBmb3IgYSA0IGJpdCBhZGRyZXNzIHNwYWNlIHdpdGggdGhlIGJhc2UgYXQgMDAxMDoKLSAqICAgMDAxMCA8LSBiYXNlCi0gKiAgIDAwMTEgPC0gdGVzdCAxCi0gKiAgIDAwMDAgPC0gKGJlbG93IHRoZSBiYXNlIGFkZHJlc3MsIHNraXBwZWQpCi0gKiAgIDAxMTAgPC0gdGVzdCAyCi0gKiAgIDEwMTAgPC0gdGVzdCAzCi0gKgotICogVGhlIHRlc3QgbG9jYXRpb25zIGFyZSBzdWNjZXNzaXZlbHkgdGVzdGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXkgYXJlCi0gKiBub3QgIm1pcnJvcmVkIiBvbnRvIHRoZSBiYXNlIGFkZHJlc3MgZHVlIHRvIGEgZmF1bHR5IGFkZHJlc3MgbGluZS4KLSAqIE5vdGUgdGhhdCB0aGUgYmFzZSBhbmQgZWFjaCB0ZXN0IGxvY2F0aW9uIGFyZSByZWxhdGVkIGJ5IG9uZSBhZGRyZXNzCi0gKiBsaW5lIGZsaXBwZWQuICBOb3RlIHRoYXQgdGhlIGJhc2UgYWRkcmVzcyBuZWVkIG5vdCBiZSBhbGwgemVyb3MuCi0gKgotICogTWVtb3J5IHRlc3RzIDEtNDoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaGVzZSB0ZXN0cyB2ZXJpZnkgUkFNIHVzaW5nIHNlcXVlbnRpYWwgd3JpdGVzIGFuZCByZWFkcwotICogdG8vZnJvbSBSQU0uIFRoZXJlIGFyZSBzZXZlcmFsIHRlc3QgY2FzZXMgdGhhdCB1c2UgZGlmZmVyZW50IHBhdHRlcm5zIHRvCi0gKiB2ZXJpZnkgUkFNLiBFYWNoIHRlc3QgY2FzZSBmaWxscyBhIHJlZ2lvbiBvZiBSQU0gd2l0aCBvbmUgcGF0dGVybiBhbmQKLSAqIHRoZW4gcmVhZHMgdGhlIHJlZ2lvbiBiYWNrIGFuZCBjb21wYXJlcyBpdHMgY29udGVudHMgd2l0aCB0aGUgcGF0dGVybi4KLSAqIFRoZSBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIHVzZWQ6Ci0gKgotICogIDFhKSB6ZXJvIHBhdHRlcm4gKDB4MDAwMDAwMDApCi0gKiAgMWIpIG5lZ2F0aXZlIHBhdHRlcm4gKDB4ZmZmZmZmZmYpCi0gKiAgMWMpIGNoZWNrZXJib2FyZCBwYXR0ZXJuICgweDU1NTU1NTU1KQotICogIDFkKSBjaGVja2VyYm9hcmQgcGF0dGVybiAoMHhhYWFhYWFhYSkKLSAqICAyKSAgYml0LWZsaXAgcGF0dGVybiAoKDEgPDwgKG9mZnNldCAlIDMyKSkKLSAqICAzKSAgYWRkcmVzcyBwYXR0ZXJuIChvZmZzZXQpCi0gKiAgNCkgIGFkZHJlc3MgcGF0dGVybiAofm9mZnNldCkKLSAqCi0gKiBCZWluZyBydW4gaW4gbm9ybWFsIG1vZGUsIHRoZSB0ZXN0IHZlcmlmaWVzIG9ubHkgc21hbGwgNEtiCi0gKiByZWdpb25zIG9mIFJBTSBhcm91bmQgZWFjaCAxTWIgYm91bmRhcnkuIEZvciBleGFtcGxlLCBmb3IgNjRNYgotICogUkFNIHRoZSBmb2xsb3dpbmcgYXJlYXMgYXJlIHZlcmlmaWVkOiAweDAwMDAwMDAwLTB4MDAwMDA4MDAsCi0gKiAweDAwMGZmODAwLTB4MDAxMDA4MDAsIDB4MDAxZmY4MDAtMHgwMDIwMDgwMCwgLi4uLCAweDAzZmZmODAwLQotICogMHgwNDAwMDAwMC4gSWYgdGhlIHRlc3QgaXMgcnVuIGluIHNsb3ctdGVzdCBtb2RlLCBpdCB2ZXJpZmllcwotICogdGhlIHdob2xlIFJBTS4KLSAqLwotCi0vKiAjaWZkZWYgQ09ORklHX1BPU1QgKi8KLQotI2luY2x1ZGUgPHBvc3QuaD4KLSNpbmNsdWRlIDx3YXRjaGRvZy5oPgotCi0vKiAjaWYgQ09ORklHX1BPU1QgJiBDT05GSUdfU1lTX1BPU1RfTUVNT1JZICovCi0KLS8qCi0gKiBEZWZpbmUgSU5KRUNUXypfRVJST1JTIGZvciB0ZXN0aW5nIGVycm9yIGRldGVjdGlvbiBpbiB0aGUgcHJlc2VuY2Ugb2YKLSAqIF9nb29kXyBoYXJkd2FyZS4KLSAqLwotI3VuZGVmICBJTkpFQ1RfREFUQV9FUlJPUlMKLSN1bmRlZiAgSU5KRUNUX0FERFJFU1NfRVJST1JTCi0KLSNpZmRlZiBJTkpFQ1RfREFUQV9FUlJPUlMKLSN3YXJuaW5nICJJbmplY3RpbmcgZGF0YSBsaW5lIGVycm9ycyBmb3IgdGVzdGluZyBwdXJwb3NlcyIKLSNlbmRpZgotCi0jaWZkZWYgSU5KRUNUX0FERFJFU1NfRVJST1JTCi0jd2FybmluZyAiSW5qZWN0aW5nIGFkZHJlc3MgbGluZSBlcnJvcnMgZm9yIHRlc3RpbmcgcHVycG9zZXMiCi0jZW5kaWYKLQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIGRvdWJsZSB3b3JkIG1vdmUgZnJvbSB0aGUgZGF0YSBhdAotICogdGhlIHNvdXJjZSBwb2ludGVyIHRvIHRoZSBsb2NhdGlvbiBhdCB0aGUgZGVzdGluYXRpb24gcG9pbnRlci4KLSAqIFRoaXMgaXMgaGVscGZ1bCBmb3IgdGVzdGluZyBtZW1vcnkgb24gcHJvY2Vzc29ycyB3aGljaCBoYXZlIGEgNjQgYml0Ci0gKiB3aWRlIGRhdGEgYnVzLgotICoKLSAqIE9uIHRob3NlIFBvd2VyUEMgd2l0aCBGUFUsIHVzZSBhc3NlbWJseSBhbmQgYSBmbG9hdGluZyBwb2ludCBtb3ZlOgotICogdGhpcyBkb2VzIGEgNjQgYml0IG1vdmUuCi0gKgotICogRm9yIG90aGVyIHByb2Nlc3NvcnMsIGxldCB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgdGhlIGJlc3QgY29kZSBpdCBjYW4uCi0gKi8KLXN0YXRpYyB2b2lkIG1vdmU2NChjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKnNyYywgdW5zaWduZWQgbG9uZyBsb25nICpkZXN0KQotewotI2lmIGRlZmluZWQoQ09ORklHX01QQzgyNjApIHx8IGRlZmluZWQoQ09ORklHX01QQzgyNFgpCi0JYXNtICgibGZkICAwLCAwKDMpXG5cdCIgLyogZnByMAkgID0gICpzY3IJKi8KLQkgInN0ZmQgMCwgMCg0KSIJCS8qICpkZXN0ICA9ICBmcHIwCSovCi0JIDogOiA6ICJmcjAiICk7CQkvKiBDbG9iYmVycyBmcjAJCSovCi0gICAgcmV0dXJuOwotI2Vsc2UKLQkqZGVzdCA9ICpzcmM7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFRoaXMgaXMgNjQgYml0IHdpZGUgdGVzdCBwYXR0ZXJucy4gIE5vdGUgdGhhdCB0aGV5IHJlc2lkZSBpbiBST00KLSAqICh3aGljaCBwcmVzdW1hYmx5IHdvcmtzKSBhbmQgdGhlIHRlc3RzIHdyaXRlIHRoZW0gdG8gUkFNIHdoaWNoIG1heQotICogbm90IHdvcmsuCi0gKgotICogVGhlICJvdGhlcnBhdHRlcm4iIGlzIHdyaXR0ZW4gdG8gZHJpdmUgdGhlIGRhdGEgYnVzIHRvIHZhbHVlcyBvdGhlcgotICogdGhhbiB0aGUgdGVzdCBwYXR0ZXJuLiAgVGhpcyBpcyBmb3IgZGV0ZWN0aW5nIGZsb2F0aW5nIGJ1cyBsaW5lcy4KLSAqCi0gKi8KLWNvbnN0IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcGF0dGVybltdID0gewotCTB4YWFhYWFhYWFhYWFhYWFhYVVMTCwKLQkweGNjY2NjY2NjY2NjY2NjY2NVTEwsCi0JMHhmMGYwZjBmMGYwZjBmMGYwVUxMLAotCTB4ZmYwMGZmMDBmZjAwZmYwMFVMTCwKLQkweGZmZmYwMDAwZmZmZjAwMDBVTEwsCi0JMHhmZmZmZmZmZjAwMDAwMDAwVUxMLAotCTB4MDAwMDAwMDBmZmZmZmZmZlVMTCwKLQkweDAwMDBmZmZmMDAwMGZmZmZVTEwsCi0JMHgwMGZmMDBmZjAwZmYwMGZmVUxMLAotCTB4MGYwZjBmMGYwZjBmMGYwZlVMTCwKLQkweDMzMzMzMzMzMzMzMzMzMzNVTEwsCi0JMHg1NTU1NTU1NTU1NTU1NTU1VUxMLAotfTsKLWNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBvdGhlcnBhdHRlcm4gPSAweDAxMjM0NTY3ODlhYmNkZWZVTEw7Ci0KLQotc3RhdGljIGludCBtZW1vcnlfcG9zdF9kYXRhbGluZSh1bnNpZ25lZCBsb25nIGxvbmcgKiBwbWVtKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wNjQ7Ci0JaW50IG51bV9wYXR0ZXJucyA9IHNpemVvZihwYXR0ZXJuKS8gc2l6ZW9mKHBhdHRlcm5bMF0pOwotCWludCBpOwotCXVuc2lnbmVkIGludCBoaSwgbG8sIHBhdGhpLCBwYXRsbzsKLQlpbnQgcmV0ID0gMDsKLQotCWZvciAoIGkgPSAwOyBpIDwgbnVtX3BhdHRlcm5zOyBpKyspIHsKLQkJbW92ZTY0KCYocGF0dGVybltpXSksIHBtZW0rKyk7Ci0JCS8qCi0JCSAqIFB1dCBhIGRpZmZlcmVudCBwYXR0ZXJuIG9uIHRoZSBkYXRhIGxpbmVzOiBvdGhlcndpc2UgdGhleQotCQkgKiBtYXkgZmxvYXQgbG9uZyBlbm91Z2ggdG8gcmVhZCBiYWNrIHdoYXQgd2Ugd3JvdGUuCi0JCSAqLwotCQltb3ZlNjQoJm90aGVycGF0dGVybiwgcG1lbS0tKTsKLQkJbW92ZTY0KHBtZW0sICZ0ZW1wNjQpOwotCi0jaWZkZWYgSU5KRUNUX0RBVEFfRVJST1JTCi0JCXRlbXA2NCBePSAweDAwMDA4MDAwOwotI2VuZGlmCi0KLQkJaWYgKHRlbXA2NCAhPSBwYXR0ZXJuW2ldKXsKLQkJCXBhdGhpID0gKHBhdHRlcm5baV0+PjMyKSAmIDB4ZmZmZmZmZmY7Ci0JCQlwYXRsbyA9IHBhdHRlcm5baV0gJiAweGZmZmZmZmZmOwotCi0JCQloaSA9ICh0ZW1wNjQ+PjMyKSAmIDB4ZmZmZmZmZmY7Ci0JCQlsbyA9IHRlbXA2NCAmIDB4ZmZmZmZmZmY7Ci0KLQkJCXByaW50ZiAoIk1lbW9yeSAoZGF0ZSBsaW5lKSBlcnJvciBhdCAlMDhseCwgIgotCQkJCSAgIndyb3RlICUwOHglMDh4LCByZWFkICUwOHglMDh4ICFcbiIsCi0JCQkJCSAgKHVsb25nKXBtZW0sIHBhdGhpLCBwYXRsbywgaGksIGxvKTsKLQkJCXJldCA9IC0xOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbWVtb3J5X3Bvc3RfYWRkcmxpbmUodWxvbmcgKnRlc3RhZGRyLCB1bG9uZyAqYmFzZSwgdWxvbmcgc2l6ZSkKLXsKLQl1bG9uZyAqdGFyZ2V0OwotCXVsb25nICplbmQ7Ci0JdWxvbmcgcmVhZGJhY2s7Ci0JdWxvbmcgeG9yOwotCWludCAgIHJldCA9IDA7Ci0KLQllbmQgPSAodWxvbmcgKikoKHVsb25nKWJhc2UgKyBzaXplKTsJLyogcG9pbnRlciBhcml0aCEgKi8KLQl4b3IgPSAwOwotCWZvcih4b3IgPSBzaXplb2YodWxvbmcpOyB4b3IgPiAwOyB4b3IgPDw9IDEpIHsKLQkJdGFyZ2V0ID0gKHVsb25nICopKCh1bG9uZyl0ZXN0YWRkciBeIHhvcik7Ci0JCWlmKCh0YXJnZXQgPj0gYmFzZSkgJiYgKHRhcmdldCA8IGVuZCkpIHsKLQkJCSp0ZXN0YWRkciA9IH4qdGFyZ2V0OwotCQkJcmVhZGJhY2sgID0gKnRhcmdldDsKLQotI2lmZGVmIElOSkVDVF9BRERSRVNTX0VSUk9SUwotCQkJaWYoeG9yID09IDB4MDAwMDgwMDApIHsKLQkJCQlyZWFkYmFjayA9ICp0ZXN0YWRkcjsKLQkJCX0KLSNlbmRpZgotCQkJaWYocmVhZGJhY2sgPT0gKnRlc3RhZGRyKSB7Ci0JCQkJcHJpbnRmICgiTWVtb3J5IChhZGRyZXNzIGxpbmUpIGVycm9yIGF0ICUwOGx4PC0+JTA4bHgsICIKLQkJCQkJIlhPUiB2YWx1ZSAlMDhseCAhXG4iLAotCQkJCQkodWxvbmcpdGVzdGFkZHIsICh1bG9uZyl0YXJnZXQsCi0JCQkJCXhvcik7Ci0JCQkJcmV0ID0gLTE7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtZW1vcnlfcG9zdF90ZXN0MSAodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQl1bG9uZyAqbWVtID0gKHVsb25nICopIHN0YXJ0OwotCXVsb25nIHJlYWRiYWNrOwotCWludCByZXQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemUgLyBzaXplb2YgKHVsb25nKTsgaSsrKSB7Ci0JCW1lbVtpXSA9IHZhbDsKLQkJaWYgKGkgJSAxMDI0ID09IDApCi0JCQlXQVRDSERPR19SRVNFVCAoKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIHNpemVvZiAodWxvbmcpICYmIHJldCA9PSAwOyBpKyspIHsKLQkJcmVhZGJhY2sgPSBtZW1baV07Ci0JCWlmIChyZWFkYmFjayAhPSB2YWwpIHsKLQkJCXByaW50ZiAoIk1lbW9yeSBlcnJvciBhdCAlMDhseCwgIgotCQkJCSAgIndyb3RlICUwOGx4LCByZWFkICUwOGx4ICFcbiIsCi0JCQkJCSAgKHVsb25nKShtZW0gKyBpKSwgdmFsLCByZWFkYmFjayk7Ci0KLQkJCXJldCA9IC0xOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgJSAxMDI0ID09IDApCi0JCQlXQVRDSERPR19SRVNFVCAoKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG1lbW9yeV9wb3N0X3Rlc3QyICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBpOwotCXVsb25nICptZW0gPSAodWxvbmcgKikgc3RhcnQ7Ci0JdWxvbmcgcmVhZGJhY2s7Ci0JaW50IHJldCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIHNpemVvZiAodWxvbmcpOyBpKyspIHsKLQkJbWVtW2ldID0gMSA8PCAoaSAlIDMyKTsKLQkJaWYgKGkgJSAxMDI0ID09IDApCi0JCQlXQVRDSERPR19SRVNFVCAoKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIHNpemVvZiAodWxvbmcpICYmIHJldCA9PSAwOyBpKyspIHsKLQkJcmVhZGJhY2sgPSBtZW1baV07Ci0JCWlmIChyZWFkYmFjayAhPSAoMSA8PCAoaSAlIDMyKSkpIHsKLQkJCXByaW50ZiAoIk1lbW9yeSBlcnJvciBhdCAlMDhseCwgIgotCQkJCSAgIndyb3RlICUwOHgsIHJlYWQgJTA4bHggIVxuIiwKLQkJCQkJICAodWxvbmcpKG1lbSArIGkpLCAxIDw8IChpICUgMzIpLCByZWFkYmFjayk7Ci0KLQkJCXJldCA9IC0xOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgJSAxMDI0ID09IDApCi0JCQlXQVRDSERPR19SRVNFVCAoKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG1lbW9yeV9wb3N0X3Rlc3QzICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBpOwotCXVsb25nICptZW0gPSAodWxvbmcgKikgc3RhcnQ7Ci0JdWxvbmcgcmVhZGJhY2s7Ci0JaW50IHJldCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIHNpemVvZiAodWxvbmcpOyBpKyspIHsKLQkJbWVtW2ldID0gaTsKLQkJaWYgKGkgJSAxMDI0ID09IDApCi0JCQlXQVRDSERPR19SRVNFVCAoKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIHNpemVvZiAodWxvbmcpICYmIHJldCA9PSAwOyBpKyspIHsKLQkJcmVhZGJhY2sgPSBtZW1baV07Ci0JCWlmIChyZWFkYmFjayAhPSBpKSB7Ci0JCQlwcmludGYgKCJNZW1vcnkgZXJyb3IgYXQgJTA4bHgsICIKLQkJCQkgICJ3cm90ZSAlMDhseCwgcmVhZCAlMDhseCAhXG4iLAotCQkJCQkgICh1bG9uZykobWVtICsgaSksIGksIHJlYWRiYWNrKTsKLQotCQkJcmV0ID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoaSAlIDEwMjQgPT0gMCkKLQkJCVdBVENIRE9HX1JFU0VUICgpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbWVtb3J5X3Bvc3RfdGVzdDQgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGk7Ci0JdWxvbmcgKm1lbSA9ICh1bG9uZyAqKSBzdGFydDsKLQl1bG9uZyByZWFkYmFjazsKLQlpbnQgcmV0ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gc2l6ZW9mICh1bG9uZyk7IGkrKykgewotCQltZW1baV0gPSB+aTsKLQkJaWYgKGkgJSAxMDI0ID09IDApCi0JCQlXQVRDSERPR19SRVNFVCAoKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIHNpemVvZiAodWxvbmcpICYmIHJldCA9PSAwOyBpKyspIHsKLQkJcmVhZGJhY2sgPSBtZW1baV07Ci0JCWlmIChyZWFkYmFjayAhPSB+aSkgewotCQkJcHJpbnRmICgiTWVtb3J5IGVycm9yIGF0ICUwOGx4LCAiCi0JCQkJICAid3JvdGUgJTA4bHgsIHJlYWQgJTA4bHggIVxuIiwKLQkJCQkJICAodWxvbmcpKG1lbSArIGkpLCB+aSwgcmVhZGJhY2spOwotCi0JCQlyZXQgPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpICUgMTAyNCA9PSAwKQotCQkJV0FUQ0hET0dfUkVTRVQgKCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IG1lbW9yeV9wb3N0X3Rlc3RzICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAocmV0ID09IDApCi0JCXJldCA9IG1lbW9yeV9wb3N0X2RhdGFsaW5lICgodW5zaWduZWQgbG9uZyBsb25nICopc3RhcnQpOwotCVdBVENIRE9HX1JFU0VUICgpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gbWVtb3J5X3Bvc3RfYWRkcmxpbmUgKCh1bG9uZyAqKXN0YXJ0LCAodWxvbmcgKilzdGFydCwgc2l6ZSk7Ci0JV0FUQ0hET0dfUkVTRVQgKCk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBtZW1vcnlfcG9zdF9hZGRybGluZSAoKHVsb25nICopKHN0YXJ0ICsgc2l6ZSAtIDgpLAotCQkJCQkgICAgKHVsb25nICopc3RhcnQsIHNpemUpOwotCVdBVENIRE9HX1JFU0VUICgpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gbWVtb3J5X3Bvc3RfdGVzdDEgKHN0YXJ0LCBzaXplLCAweDAwMDAwMDAwKTsKLQlXQVRDSERPR19SRVNFVCAoKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IG1lbW9yeV9wb3N0X3Rlc3QxIChzdGFydCwgc2l6ZSwgMHhmZmZmZmZmZik7Ci0JV0FUQ0hET0dfUkVTRVQgKCk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBtZW1vcnlfcG9zdF90ZXN0MSAoc3RhcnQsIHNpemUsIDB4NTU1NTU1NTUpOwotCVdBVENIRE9HX1JFU0VUICgpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gbWVtb3J5X3Bvc3RfdGVzdDEgKHN0YXJ0LCBzaXplLCAweGFhYWFhYWFhKTsKLQlXQVRDSERPR19SRVNFVCAoKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IG1lbW9yeV9wb3N0X3Rlc3QyIChzdGFydCwgc2l6ZSk7Ci0JV0FUQ0hET0dfUkVTRVQgKCk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBtZW1vcnlfcG9zdF90ZXN0MyAoc3RhcnQsIHNpemUpOwotCVdBVENIRE9HX1JFU0VUICgpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gbWVtb3J5X3Bvc3RfdGVzdDQgKHN0YXJ0LCBzaXplKTsKLQlXQVRDSERPR19SRVNFVCAoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLSNpZiAwCi1ERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotaW50IG1lbW9yeV9wb3N0X3Rlc3QgKGludCBmbGFncykKLXsKLQlpbnQgcmV0ID0gMDsKLQliZF90ICpiZCA9IGdkLT5iZDsKLQlwaHlzX3NpemVfdCBtZW1zaXplID0gKGJkLT5iaV9tZW1zaXplID49IDI1NiA8PCAyMCA/Ci0JCQkJIDI1NiA8PCAyMCA6IGJkLT5iaV9tZW1zaXplKSAtICgxIDw8IDIwKTsKLQotCi0JaWYgKGZsYWdzICYgUE9TVF9TTE9XVEVTVCkgewotCQlyZXQgPSBtZW1vcnlfcG9zdF90ZXN0cyAoQ09ORklHX1NZU19TRFJBTV9CQVNFLCBtZW1zaXplKTsKLQl9IGVsc2UgewkJCS8qIFBPU1RfTk9STUFMICovCi0KLQkJdW5zaWduZWQgbG9uZyBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAobWVtc2l6ZSA+PiAyMCkgJiYgcmV0ID09IDA7IGkrKykgewotCQkJaWYgKHJldCA9PSAwKQotCQkJCXJldCA9IG1lbW9yeV9wb3N0X3Rlc3RzIChpIDw8IDIwLCAweDgwMCk7Ci0JCQlpZiAocmV0ID09IDApCi0JCQkJcmV0ID0gbWVtb3J5X3Bvc3RfdGVzdHMgKChpIDw8IDIwKSArIDB4ZmY4MDAsIDB4ODAwKTsKLQkJfQotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgLyogMCAqLwotCi0vKiAjZW5kaWYgKi8gLyogQ09ORklHX1BPU1QgJiBDT05GSUdfU1lTX1BPU1RfTUVNT1JZICovCi0vKiAjZW5kaWYgKi8gLyogQ09ORklHX1BPU1QgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvcnM0ODUuYyBiL2JvYXJkL3RyYWIvcnM0ODUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzMzZmMi4uMDAwMDAwMAotLS0gYS9ib2FyZC90cmFiL3JzNDg1LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMwotICogTWFydGluIEtyYXVzZSwgVFEtU3lzdGVtcyBHbWJILCA8bWFydGluLmtyYXVzZUB0cXMuZGU+Ci0gKgotICogQmFzZWQgb24gYXJjaC9hcm0vY3B1L2FybTkyMHQvc2VyaWFsLmMsIGJ5IEdhcnkgSmVubmVqb2huCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIgR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnYXJ5akBkZW54LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+Ci0jaW5jbHVkZSAicnM0ODUuaCIKLQotc3RhdGljIHZvaWQgcnM0ODVfc2V0YnJnICh2b2lkKTsKLXN0YXRpYyB2b2lkIHJzNDg1X2NmZ2lvICh2b2lkKTsKLXN0YXRpYyB2b2lkIHNldF9yczQ4NXJlKHVuc2lnbmVkIGNoYXIgcnM0ODVyZV9zdGF0ZSk7Ci1zdGF0aWMgdm9pZCBzZXRfcnM0ODVkZSh1bnNpZ25lZCBjaGFyIHJzNDg1ZGVfc3RhdGUpOwotc3RhdGljIHZvaWQgcnM0ODVfc2V0YnJnICh2b2lkKTsKLSNpZmRlZglOT1RfVVNFRAotc3RhdGljIHZvaWQgdHJhYl9yczQ4NV9kaXNhYmxlX3R4KHZvaWQpOwotc3RhdGljIHZvaWQgdHJhYl9yczQ4NV9kaXNhYmxlX3J4KHZvaWQpOwotI2VuZGlmCi0KLSNkZWZpbmUgVUFSVF9OUglTM0MyNFgwX1VBUlQxCi0KLS8qIENQTEQtUmVnaXN0ZXIgZm9yIGNvbnRyb2xsaW5nIFRSQUIgaGFyZHdhcmUgZnVuY3Rpb25zICovCi0jZGVmaW5lIENQTERfUlM0ODVfUkUgICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMjgwMDApCi0KLXN0YXRpYyB2b2lkIHJzNDg1X3NldGJyZyAodm9pZCkKLXsKLQlzdHJ1Y3QgczNjMjR4MF91YXJ0ICogY29uc3QgdWFydCA9IHMzYzI0eDBfZ2V0X2Jhc2VfdWFydChVQVJUX05SKTsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgcmVnID0gMDsKLQotCS8qIHZhbHVlIGlzIGNhbGN1bGF0ZWQgc28gOiAoaW50KShQQ0xLLzE2Li9iYXVkcmF0ZSkgLTEgKi8KLQkvKiByZWcgPSAoMzMwMDAwMDAgLyAoMTYgKiBnZC0+YmF1ZHJhdGUpKSAtIDE7ICovCi0JcmVnID0gKDMzMDAwMDAwIC8gKDE2ICogMzg0MDApKSAtIDE7Ci0KLQkvKiBGSUZPIGVuYWJsZSwgVHgvUnggRklGTyBjbGVhciAqLwotCXVhcnQtPnVmY29uID0gMHgwNzsKLQl1YXJ0LT51bWNvbiA9IDB4MDsKLQkvKiBOb3JtYWwsTm8gcGFyaXR5LDEgc3RvcCw4IGJpdCAqLwotCXVhcnQtPnVsY29uID0gMHgzOwotCS8qCi0JICogdHg9bGV2ZWwscng9ZWRnZSxkaXNhYmxlIHRpbWVvdXQgaW50LixlbmFibGUgcnggZXJyb3IgaW50LiwKLQkgKiBub3JtYWwsaW50ZXJydXB0IG9yIHBvbGxpbmcKLQkgKi8KLQl1YXJ0LT51Y29uID0gMHgyNDU7Ci0JdWFydC0+dWJyZGl2ID0gcmVnOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKTsKLX0KLQotc3RhdGljIHZvaWQgcnM0ODVfY2ZnaW8gKHZvaWQpCi17Ci0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQotCWdwaW8tPnBmY29uICY9IH4oMHgzIDw8IDIpOwotCWdwaW8tPnBmY29uIHw9ICAoMHgyIDw8IDIpOyAvKiBjb25maWd1cmUgR1BGMSBhcyBSWEQxICovCi0KLQlncGlvLT5wZmNvbiAmPSB+KDB4MyA8PCA2KTsKLQlncGlvLT5wZmNvbiB8PSAgKDB4MiA8PCA2KTsgLyogY29uZmlndXJlIEdQRjMgYXMgVFhEMSAqLwotCi0JZ3Bpby0+cGZ1cCB8PSAoMSA8PCAxKTsgLyogZGlzYWJsZSBwdWxsdXAgb24gR1BGMSAqLwotCWdwaW8tPnBmdXAgfD0gKDEgPDwgMyk7IC8qIGRpc2FibGUgcHVsbHVwIG9uIEdQRjMgKi8KLQotCWdwaW8tPnBhY29uICY9IH4oMSA8PCAxMSk7IC8qIHNldCBHUEExMSAoUlM0ODVfREUpIHRvIG91dHB1dCAqLwotfQotCi0vKgotICogSW5pdGlhbGlzZSB0aGUgcnM0ODUgcG9ydCB3aXRoIHRoZSBnaXZlbiBiYXVkcmF0ZS4gVGhlIHNldHRpbmdzCi0gKiBhcmUgYWx3YXlzIDggZGF0YSBiaXRzLCBubyBwYXJpdHksIDEgc3RvcCBiaXQsIG5vIHN0YXJ0IGJpdHMuCi0gKgotICovCi1pbnQgcnM0ODVfaW5pdCAodm9pZCkKLXsKLQlyczQ4NV9jZmdpbyAoKTsKLQlyczQ4NV9zZXRicmcgKCk7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogUmVhZCBhIHNpbmdsZSBieXRlIGZyb20gdGhlIHJzNDg1IHBvcnQuIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwCi0gKiBvdGhlcndpc2UuIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIHN1Y2Nlc2Z1bGwsIHRoZSBjaGFyYWN0ZXIgcmVhZCBpcwotICogd3JpdHRlbiBpbnRvIGl0cyBhcmd1bWVudCBjLgotICovCi1pbnQgcnM0ODVfZ2V0YyAodm9pZCkKLXsKLQlzdHJ1Y3QgczNjMjR4MF91YXJ0ICogY29uc3QgdWFydCA9IHMzYzI0eDBfZ2V0X2Jhc2VfdWFydChVQVJUX05SKTsKLQotCS8qIHdhaXQgZm9yIGNoYXJhY3RlciB0byBhcnJpdmUgKi8KLQl3aGlsZSAoISh1YXJ0LT51dHJzdGF0ICYgMHgxKSkKLQkJOwotCi0JcmV0dXJuIHVhcnQtPnVyeGggJiAweGZmOwotfQotCi0vKgotICogT3V0cHV0IGEgc2luZ2xlIGJ5dGUgdG8gdGhlIHJzNDg1IHBvcnQuCi0gKi8KLXZvaWQgcnM0ODVfcHV0YyAoY29uc3QgY2hhciBjKQotewotCXN0cnVjdCBzM2MyNHgwX3VhcnQgKiBjb25zdCB1YXJ0ID0gczNjMjR4MF9nZXRfYmFzZV91YXJ0KFVBUlRfTlIpOwotCi0JLyogd2FpdCBmb3Igcm9vbSBpbiB0aGUgdHggRklGTyAqLwotCXdoaWxlICghKHVhcnQtPnV0cnN0YXQgJiAweDIpKQotCQk7Ci0KLQl1YXJ0LT51dHhoID0gYzsKLQotCS8qIElmIFxuLCBhbHNvIGRvIFxyICovCi0JaWYgKGMgPT0gJ1xuJykKLQkJcnM0ODVfcHV0YyAoJ1xyJyk7Ci19Ci0KLS8qCi0gKiBUZXN0IHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgaW4gdGhlIFJYIGJ1ZmZlcgotICovCi1pbnQgcnM0ODVfdHN0YyAodm9pZCkKLXsKLQlzdHJ1Y3QgczNjMjR4MF91YXJ0ICogY29uc3QgdWFydCA9IHMzYzI0eDBfZ2V0X2Jhc2VfdWFydChVQVJUX05SKTsKLQotCXJldHVybiB1YXJ0LT51dHJzdGF0ICYgMHgxOwotfQotCi12b2lkIHJzNDg1X3B1dHMgKGNvbnN0IGNoYXIgKnMpCi17Ci0Jd2hpbGUgKCpzKSB7Ci0JCXJzNDg1X3B1dGMgKCpzKyspOwotCX0KLX0KLQotCi0vKgotICogU3RhdGUgdGFibGU6Ci0gKglSRQlERQlSZXN1bHQKLSAqCTEJMQlYTUlUCi0gKgkwCTAJUkNWCi0gKgkxCTAJU2h1dGRvd24KLSAqLwotCi0vKiBmdW5jdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSByZWNlaXZlciBlbmFibGUgZm9yIHRoZSByczQ4NSAqLwotLyogcnM0ODVyZV9zdGF0ZSByZWZsZWN0cyB0aGUgbGV2ZWwgKDAvMSkgb2YgdGhlIFJFIHBpbiAqLwotCi1zdGF0aWMgdm9pZCBzZXRfcnM0ODVyZSh1bnNpZ25lZCBjaGFyIHJzNDg1cmVfc3RhdGUpCi17Ci0JaWYocnM0ODVyZV9zdGF0ZSkKLQkJKkNQTERfUlM0ODVfUkUgPSAweDAxMDAwMDsKLQllbHNlCi0JCSpDUExEX1JTNDg1X1JFID0gMHgwOwotfQotCi0vKiBmdW5jdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBzZW5kZXIgZW5hYmxlIGZvciB0aGUgcnM0ODUgKi8KLS8qIHJzNDg1ZGVfc3RhdGUgcmVmbGVjdHMgdGhlIGxldmVsICgwLzEpIG9mIHRoZSBERSBwaW4gKi8KLQotc3RhdGljIHZvaWQgc2V0X3JzNDg1ZGUodW5zaWduZWQgY2hhciByczQ4NWRlX3N0YXRlKQotewotCXN0cnVjdCBzM2MyNHgwX2dwaW8gKiBjb25zdCBncGlvID0gczNjMjR4MF9nZXRfYmFzZV9ncGlvKCk7Ci0KLQkvKiBUaGlzIGlzIG9uIFBPUlQgQSBiaXQgMTEgKi8KLQlpZihyczQ4NWRlX3N0YXRlKQotCQlncGlvLT5wYWRhdCB8PSAoMSA8PCAxMSk7Ci0JZWxzZQotCQlncGlvLT5wYWRhdCAmPSB+KDEgPDwgMTEpOwotfQotCi0KLXZvaWQgdHJhYl9yczQ4NV9lbmFibGVfdHgodm9pZCkKLXsKLQlzZXRfcnM0ODVkZSgxKTsKLQlzZXRfcnM0ODVyZSgxKTsKLX0KLQotdm9pZCB0cmFiX3JzNDg1X2VuYWJsZV9yeCh2b2lkKQotewotCXNldF9yczQ4NXJlKDApOwotCXNldF9yczQ4NWRlKDApOwotfQotCi0jaWZkZWYJTk9UX1VTRUQKLXN0YXRpYyB2b2lkIHRyYWJfcnM0ODVfZGlzYWJsZV90eCh2b2lkKQotewotCXNldF9yczQ4NWRlKDApOwotfQotCi1zdGF0aWMgdm9pZCB0cmFiX3JzNDg1X2Rpc2FibGVfcngodm9pZCkKLXsKLQlzZXRfcnM0ODVyZSgxKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9yczQ4NS5oIGIvYm9hcmQvdHJhYi9yczQ4NS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWUzMjQ0Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3RyYWIvcnM0ODUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDMKLSAqIE1hcnRpbiBLcmF1c2UsIFRRLVN5c3RlbXMgR21iSCwgPG1hcnRpbi5rcmF1c2VAdHFzLmRlPgotICoKLSAqIEJhc2VkIG9uIGFyY2gvYXJtL2NwdS9hcm05MjB0L3NlcmlhbC5jLCBieSBHYXJ5IEplbm5lam9obgotICogKEMpIENvcHlyaWdodCAyMDAyIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2FyeWpAZGVueC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX1JTNDg1X0hfCi0jZGVmaW5lIF9SUzQ4NV9IXwotCi0jaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KLQotaW50IHJzNDg1X2luaXQgKHZvaWQpOwotaW50IHJzNDg1X2dldGMgKHZvaWQpOwotdm9pZCByczQ4NV9wdXRjIChjb25zdCBjaGFyIGMpOwotaW50IHJzNDg1X3RzdGMgKHZvaWQpOwotdm9pZCByczQ4NV9wdXRzIChjb25zdCBjaGFyICpzKTsKLXZvaWQgdHJhYl9yczQ4NV9lbmFibGVfdHgodm9pZCk7Ci12b2lkIHRyYWJfcnM0ODVfZW5hYmxlX3J4KHZvaWQpOwotCi0jZW5kaWYJLyogX1JTNDg1X0hfICovCmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL3RyYWIuYyBiL2JvYXJkL3RyYWIvdHJhYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjc0ZThmLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3RyYWIvdHJhYi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2FyeWpAZGVueC5kZT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKiAjZGVmaW5lIERFQlVHICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxuZXRkZXYuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNHgwX2NwdS5oPgotI2luY2x1ZGUgPGNvbW1hbmQuaD4KLQotREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0KLSNpZmRlZiBDT05GSUdfU1lTX0JSSUdIVE5FU1MKLXN0YXRpYyB2b2lkIHNwaV9pbml0KHZvaWQpOwotc3RhdGljIHZvaWQgd2FpdF90cmFuc21pdF9kb25lKHZvaWQpOwotc3RhdGljIHZvaWQgdHNjMjAwMF93cml0ZSh1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHJlZywKLQkJCQkJCSAgdW5zaWduZWQgaW50IGRhdGEpOwotc3RhdGljIHZvaWQgdHNjMjAwMF9zZXRfYnJpZ2h0bmVzcyh2b2lkKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NT0RFTV9TVVBQT1JUCi1zdGF0aWMgaW50IGtleV9wcmVzc2VkKHZvaWQpOwotZXh0ZXJuIHZvaWQgZGlzYWJsZV9wdXRjKHZvaWQpOwotZXh0ZXJuIGludCBkb19tZG1faW5pdDsgLyogZGVmaW5lZCBpbiBjb21tb24vbWFpbi5jICovCi0KLS8qCi0gKiBXZSBuZWVkIGEgZGVsYXkgb2YgYXQgbGVhc3QgNTAwIHVzIGFmdGVyIHR1cm5pbmcgb24gdGhlIFZGRCBjbG9jawotICogYmVmb3JlIHdlIGNhbiByZWFkIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gZm9yIHRoZSBDUExEIGNvbnRyb2xsaW5nCi0gKiB0aGUga2V5Ym9hcmQgc3dpdGNoZXMuIExldCdzIHBsYXkgc2FmZSBhbmQgd2FpdCA1IG1zLiBUaGUgcHJvYmxlbQotICogaXMgdGhhdCB0aW1lcnMgYXJlIG5vdCBhdmFpbGFibGUgeWV0LCBzbyB3ZSB1c2UgYSBtYW51YWxseSB0aW1lZAotICogbG9vcC4KLSAqLwotI2RlZmluZSBLQkRfTURFTEFZCTUwMDAKLXN0YXRpYyB2b2lkIHVkZWxheV9ub190aW1lciAoaW50IHVzZWMpCi17Ci0JaW50IGk7Ci0JaW50IGRlbGF5ID0gdXNlYyAqIDM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGVsYXk7IGkgKyspIGdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfVFJBQjsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTU9ERU1fU1VQUE9SVCAqLwotCi0vKgotICogTWlzY2VsbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGlzYXRpb25zCi0gKi8KLQotaW50IGJvYXJkX2luaXQgKCkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19WRkQpCi0JZXh0ZXJuIGludCB2ZmRfaW5pdF9jbG9ja3Modm9pZCk7Ci0jZW5kaWYKLQlzdHJ1Y3QgczNjMjR4MF9jbG9ja19wb3dlciAqIGNvbnN0IGNsa19wb3dlciA9Ci0JCQkJCXMzYzI0eDBfZ2V0X2Jhc2VfY2xvY2tfcG93ZXIoKTsKLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCi0JLyogbWVtb3J5IGFuZCBjcHUtc3BlZWQgYXJlIHNldHVwIGJlZm9yZSByZWxvY2F0aW9uICovCi0jaWZkZWYgQ09ORklHX1RSQUJfNTBNSFoKLQkvKiBjaGFuZ2UgdGhlIGNsb2NrIHRvIGJlIDUwIE1IeiAxOjE6MSAqLwotCS8qIE1ESVY6MHg1YyBQRElWOjQgU0RJVjoyICovCi0JY2xrX3Bvd2VyLT5tcGxsY29uID0gMHg1YzA0MjsKLQljbGtfcG93ZXItPmNsa2Rpdm4gPSAwOwotI2Vsc2UKLQkvKiBjaGFuZ2UgdGhlIGNsb2NrIHRvIGJlIDEzMyBNSHogMToyOjQgKi8KLQkvKiBNRElWOjB4N2QgUERJVjo0IFNESVY6MSAqLwotCWNsa19wb3dlci0+bXBsbGNvbiA9IDB4N2QwNDE7Ci0JY2xrX3Bvd2VyLT5jbGtkaXZuID0gMzsKLSNlbmRpZgotCi0JLyogc2V0IHVwIHRoZSBJL08gcG9ydHMgKi8KLQlncGlvLT5wYWNvbiA9IDB4M2ZmZmY7Ci0JZ3Bpby0+cGJjb24gPSAweGFhYWFhYWFhOwotCWdwaW8tPnBidXAgID0gMHhmZmZmOwotCS8qIElOUFVUIG5DVFMwIG5SVFMwIFRYRFsxXSBUWERbMF0gUlhEWzFdIFJYRFswXQkqLwotCS8qICAwMCwgICAgMTAsICAgICAgMTAsICAgICAgMTAsICAgICAgMTAsICAgICAgMTAsICAgICAgMTAJKi8KLQlncGlvLT5wZmNvbiA9ICgyPDwwKSB8ICgyPDwyKSB8ICgyPDw0KSB8ICgyPDw2KSB8ICgyPDw4KSB8ICgyPDwxMCk7Ci0jaWZkZWYgQ09ORklHX0hXRkxPVwotCS8qIGRvIG5vdCBwdWxsIHVwIFJYRDAsIFJYRDEsIFRYRDAsIFRYRDEsIENUUzAsIFJUUzAgKi8KLQlncGlvLT5wZnVwICA9ICgxPDwwKSB8ICgxPDwxKSB8ICgxPDwyKSB8ICgxPDwzKSB8ICgxPDw0KSB8ICgxPDw1KTsKLSNlbHNlCi0JLyogZG8gbm90IHB1bGwgdXAgUlhEMCwgUlhEMSwgVFhEMCwgVFhEMSAqLwotCWdwaW8tPnBmdXAgID0gKDE8PDApIHwgKDE8PDEpIHwgKDE8PDIpIHwgKDE8PDMpOwotI2VuZGlmCi0JZ3Bpby0+cGdjb24gPSAweDA7Ci0JZ3Bpby0+cGd1cCAgPSAweDA7Ci0JZ3Bpby0+b3BlbmNyID0gMHgwOwotCi0JLyogc3VwcHJlc3MgZmxpY2tlciBvZiB0aGUgVkZEcyAqLwotCWdwaW8tPm1pc2NjciA9IDB4NDA7Ci0JZ3Bpby0+cGZjb24gfD0gKDI8PDEyKTsKLQotCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfVFJBQjsKLQotCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KLQlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gMHgwYzAwMDEwMDsKLQotCS8qIE1ha2Ugc3VyZSBib3RoIGJ1enplcnMgYXJlIHR1cm5lZCBvZmYgKi8KLQlncGlvLT5wZGNvbiB8PSAweDU0MDA7Ci0JZ3Bpby0+cGRkYXQgJj0gfjB4RTA7Ci0KLSNpZmRlZiBDT05GSUdfVkZECi0JdmZkX2luaXRfY2xvY2tzKCk7Ci0jZW5kaWYgLyogQ09ORklHX1ZGRCAqLwotCi0jaWZkZWYgQ09ORklHX01PREVNX1NVUFBPUlQKLQl1ZGVsYXlfbm9fdGltZXIgKEtCRF9NREVMQVkpOwotCi0JaWYgKGtleV9wcmVzc2VkKCkpIHsKLQkJZGlzYWJsZV9wdXRjKCk7CS8qIG1vZGVtIGRvZXNuJ3QgdW5kZXJzdGFuZCBiYW5uZXIgZXRjICovCi0JCWRvX21kbV9pbml0ID0gMTsKLQl9Ci0jZW5kaWYJLyogQ09ORklHX01PREVNX1NVUFBPUlQgKi8KLQotI2lmZGVmIENPTkZJR19EUklWRVJfUzNDMjRYMF9JMkMKLQkvKiBDb25maWd1cmUgSS9PIHBvcnRzIFBHNSB1bmQgUEc2IGZvciBJMkMgKi8KLQlncGlvLT5wZ2NvbiA9IChncGlvLT5wZ2NvbiAmIDB4MDAzYzAwKSB8IDB4MDAzYzAwOwotI2VuZGlmIC8qIENPTkZJR19EUklWRVJfUzNDMjRYMF9JMkMgKi8KLQotCXJldHVybiAwOwotfQotCi1pbnQgZHJhbV9pbml0ICh2b2lkKQotewotCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOwotCXJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBLZXlib2FyZCBDb250cm9sbGVyCi0gKi8KLQotLyogTWF4aW11bSBrZXkgbnVtYmVyICovCi0jZGVmaW5lIEtFWUJEX0tFWV9OVU0JCTQKLQotI2RlZmluZSBLQkRfREFUQQkoKCgqKHZvbGF0aWxlIHVsb25nICopMHgwNDAyMDAwMCkgPj4gMTYpICYgMHhGKQotCi1zdGF0aWMgY2hhciAqa2V5X21hdGNoICh1bG9uZyk7Ci0KLWludCBtaXNjX2luaXRfciAodm9pZCkKLXsKLQl1bG9uZyBrYmRfZGF0YSA9IEtCRF9EQVRBOwotCWNoYXIgKnN0cjsKLQljaGFyIGtleWJkX2VudltLRVlCRF9LRVlfTlVNICsgMV07Ci0JaW50IGk7Ci0KLSNpZmRlZiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRQotCXsKLQkJLyogU2V0IHZlcnNpb24gdmFyaWFibGUuIFBsZWFzZSBub3RlLCB0aGF0IHRoaXMgdmFyaWFibGUgaXMKLQkJICogYWxzbyBzZXQgaW4gbWFpbl9sb29wKCkgbGF0ZXIgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gVGhlCi0JCSAqIHZlcnNpb24gdmFyaWFibGUgaGFzIHRvIGJlIHNldCB0aGlzIGVhcmx5LCBiZWNhdXNlIHNvIGl0Ci0JCSAqIGNvdWxkIGJlIHVzZWQgaW4gc2NyaXB0IGZpbGVzIG9uIGFuIHVzYiBzdGljaywgd2hpY2gKLQkJICogbWlnaHQgYmUgY2FsbGVkIGR1cmluZyBkb19hdXRvX3VwZGF0ZSgpICovCi0JCWV4dGVybiBjaGFyIHZlcnNpb25fc3RyaW5nW107Ci0KLQkJc2V0ZW52ICgidmVyIiwgdmVyc2lvbl9zdHJpbmcpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSAqLwotCi0jaWZkZWYgQ09ORklHX0FVVE9fVVBEQVRFCi0JewotCQlleHRlcm4gaW50IGRvX2F1dG9fdXBkYXRlKHZvaWQpOwotCQkvKiB0aGlzIGhhcyBwcmlvcml0eSBvdmVyIGFsbCBlbHNlICovCi0JCWRvX2F1dG9fdXBkYXRlKCk7Ci0JfQotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwgS0VZQkRfS0VZX05VTTsgKytpKSB7Ci0JCWtleWJkX2VudltpXSA9ICcwJyArICgoa2JkX2RhdGEgPj4gaSkgJiAxKTsKLQl9Ci0Ja2V5YmRfZW52W2ldID0gJ1wwJzsKLQlkZWJ1ZyAoIioqIFNldHRpbmcga2V5YmQ9XCIlc1wiXG4iLCBrZXliZF9lbnYpOwotCXNldGVudiAoImtleWJkIiwga2V5YmRfZW52KTsKLQotCXN0ciA9IHN0cmR1cCAoa2V5X21hdGNoIChrYmRfZGF0YSkpOwkvKiBkZWNvZGUga2V5cyAqLwotCi0jaWZkZWYgQ09ORklHX1BSRUJPT1QJLyogYXV0b21hdGljYWxseSBjb25maWd1cmUgInByZWJvb3QiIGNvbW1hbmQgb24ga2V5IG1hdGNoICovCi0JZGVidWcgKCIqKiBTZXR0aW5nIHByZWJvb3Q9XCIlc1wiXG4iLCBzdHIpOwotCXNldGVudiAoInByZWJvb3QiLCBzdHIpOwkvKiBzZXQgb3IgZGVsZXRlIGRlZmluaXRpb24gKi8KLSNlbmRpZiAvKiBDT05GSUdfUFJFQk9PVCAqLwotCWlmIChzdHIgIT0gTlVMTCkgewotCQlmcmVlIChzdHIpOwotCX0KLQotI2lmZGVmIENPTkZJR19TWVNfQlJJR0hUTkVTUwotCXRzYzIwMDBfc2V0X2JyaWdodG5lc3MoKTsKLSNlbmRpZgotCXJldHVybiAoMCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUFJFQk9PVAotCi1zdGF0aWMgdWNoYXIga2JkX21hZ2ljX3ByZWZpeFtdID0gImtleV9tYWdpYyI7Ci1zdGF0aWMgdWNoYXIga2JkX2NvbW1hbmRfcHJlZml4W10gPSAia2V5X2NtZCI7Ci0KLXN0YXRpYyBpbnQgY29tcGFyZV9tYWdpYyAodWxvbmcga2JkX2RhdGEsIGNoYXIgKnN0cikKLXsKLQl1Y2hhciBrZXlfbWFzazsKLQotCWRlYnVnICgiY29tcGFyZV9tYWdpYzoga2JkOiAlMDRseCAgc3RyOiBcIiVzXCJcbiIsa2JkX2RhdGEsc3RyKTsKLQlmb3IgKDsgKnN0cjsgc3RyKyspCi0JewotCQl1Y2hhciBjID0gKnN0ciAtICcxJzsKLQotCQlpZiAoYyA+PSBLRVlCRF9LRVlfTlVNKQkJLyogYmFkIGtleSBudW1iZXIgKi8KLQkJCXJldHVybiAtMTsKLQotCQlrZXlfbWFzayA9IDEgPDwgYzsKLQotCQlpZiAoIShrYmRfZGF0YSAmIGtleV9tYXNrKSkgewkvKiBrZXkgbm90IHByZXNzZWQgKi8KLQkJCWRlYnVnICggImNvbXBhcmVfbWFnaWM6ICIKLQkJCQkia2JkOiAlMDRseCBtYXNrOiAlMDRseCAtIGtleSBub3QgcHJlc3NlZFxuIiwKLQkJCQlrYmRfZGF0YSwga2V5X21hc2sgKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWtiZF9kYXRhICY9IH5rZXlfbWFzazsKLQl9Ci0KLQlpZiAoa2JkX2RhdGEpIHsJCQkJLyoga2V5KHMpIG5vdCByZWxlYXNlZCAqLwotCQlkZWJ1ZyAoICJjb21wYXJlX21hZ2ljOiAiCi0JCQkia2JkOiAlMDRseCAtIGtleShzKSBub3QgcmVsZWFzZWRcbiIsIGtiZF9kYXRhKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBDaGVjayBpZiBwcmVzc2VkIGtleShzKSBtYXRjaCBtYWdpYyBzZXF1ZW5jZSwKLSAqIGFuZCByZXR1cm4gdGhlIGNvbW1hbmQgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGtleShzKS4KLSAqCi0gKiBJZiBubyBrZXkgcHJlc3Mgd2FzIGRlY29kZWQsIE5VTEwgaXMgcmV0dXJuZWQuCi0gKgotICogTm90ZTogdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXJndW1lbnQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoCi0gKiB0aGUgIm1hZ2ljIGNoYXJjdGVyIGNvZGUiIG9mIHRoZSBkZWNvZGVkIGtleShzKSwgb3IgJ1wwJy4KLSAqCi0gKgotICogTm90ZTogdGhlIHN0cmluZyBwb2ludHMgdG8gc3RhdGljIGVudmlyb25tZW50IGRhdGEgYW5kIG11c3QgYmUKLSAqIHNhdmVkIGJlZm9yZSB5b3UgY2FsbCBhbnkgZnVuY3Rpb24gdGhhdCBtb2RpZmllcyB0aGUgZW52aXJvbm1lbnQuCi0gKi8KLXN0YXRpYyBjaGFyICprZXlfbWF0Y2ggKHVsb25nIGtiZF9kYXRhKQotewotCWNoYXIgbWFnaWNbc2l6ZW9mIChrYmRfbWFnaWNfcHJlZml4KSArIDFdOwotCWNoYXIgY21kX25hbWVbc2l6ZW9mIChrYmRfY29tbWFuZF9wcmVmaXgpICsgMV07Ci0JY2hhciAqc3VmZml4OwotCWNoYXIgKmtiZF9tYWdpY19rZXlzOwotCi0JLyoKLQkgKiBUaGUgZm9sbG93aW5nIHN0cmluZyBkZWZpbmVzIHRoZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIHBlIGFwcGVuZGVkCi0JICogdG8gImtleV9tYWdpYyIgdG8gZm9ybSB0aGUgbmFtZXMgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQKLQkgKiBob2xkICJtYWdpYyIga2V5IGNvZGVzLCBpLiBlLiBzdWNoIGtleSBjb2RlcyB0aGF0IGNhbiBjYXVzZQotCSAqIHByZS1ib290IGFjdGlvbnMuIElmIHRoZSBzdHJpbmcgaXMgZW1wdHkgKCIiKSwgdGhlbiBvbmx5Ci0JICogImtleV9tYWdpYyIgaXMgY2hlY2tlZCAob2xkIGJlaGF2aW91cik7IHRoZSBzdHJpbmcgIjEyNSIgY2F1c2VzCi0JICogY2hlY2tzIGZvciAia2V5X21hZ2ljMSIsICJrZXlfbWFnaWMyIiBhbmQgImtleV9tYWdpYzUiLCBldGMuCi0JICovCi0JaWYgKChrYmRfbWFnaWNfa2V5cyA9IGdldGVudiAoIm1hZ2ljX2tleXMiKSkgPT0gTlVMTCkKLQkJa2JkX21hZ2ljX2tleXMgPSAiIjsKLQotCWRlYnVnICgia2V5X21hdGNoOiBtYWdpY19rZXlzPVwiJXNcIlxuIiwga2JkX21hZ2ljX2tleXMpOwotCi0JLyogbG9vcCBvdmVyIGFsbCBtYWdpYyBrZXlzOwotCSAqIHVzZSAnXDAnIHN1ZmZpeCBpbiBjYXNlIG9mIGVtcHR5IHN0cmluZwotCSAqLwotCWZvciAoc3VmZml4PWtiZF9tYWdpY19rZXlzOyAqc3VmZml4IHx8IHN1ZmZpeD09a2JkX21hZ2ljX2tleXM7ICsrc3VmZml4KQotCXsKLQkJc3ByaW50ZiAobWFnaWMsICIlcyVjIiwga2JkX21hZ2ljX3ByZWZpeCwgKnN1ZmZpeCk7Ci0KLQkJZGVidWcgKCJrZXlfbWF0Y2g6IG1hZ2ljPVwiJXNcIlxuIiwKLQkJCWdldGVudihtYWdpYykgPyBnZXRlbnYobWFnaWMpIDogIjxVTkRFRklORUQ+Iik7Ci0KLQkJaWYgKGNvbXBhcmVfbWFnaWMoa2JkX2RhdGEsIGdldGVudihtYWdpYykpID09IDApCi0JCXsKLQkJCXNwcmludGYgKGNtZF9uYW1lLCAiJXMlYyIsIGtiZF9jb21tYW5kX3ByZWZpeCwgKnN1ZmZpeCk7Ci0JCQlkZWJ1ZyAoImtleV9tYXRjaDogY21kbmFtZSAlcz1cIiVzXCJcbiIsCi0JCQkJY21kX25hbWUsCi0JCQkJZ2V0ZW52IChjbWRfbmFtZSkgPwotCQkJCQlnZXRlbnYgKGNtZF9uYW1lKSA6Ci0JCQkJCSI8VU5ERUZJTkVEPiIpOwotCQkJcmV0dXJuIChnZXRlbnYgKGNtZF9uYW1lKSk7Ci0JCX0KLQl9Ci0JZGVidWcgKCJrZXlfbWF0Y2g6IG5vIG1hdGNoXG4iKTsKLQlyZXR1cm4gKE5VTEwpOwotfQotI2VuZGlmCQkJCQkJCS8qIENPTkZJR19QUkVCT09UICovCi0KLS8qIFJlYWQgS2V5Ym9hcmQgc3RhdHVzICovCi1pbnQgZG9fa2JkIChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQotewotCXVsb25nIGtiZF9kYXRhID0gS0JEX0RBVEE7Ci0JY2hhciBrZXliZF9lbnZbS0VZQkRfS0VZX05VTSArIDFdOwotCWludCBpOwotCi0JcHV0cyAoIktleXM6Iik7Ci0JZm9yIChpID0gMDsgaSA8IEtFWUJEX0tFWV9OVU07ICsraSkgewotCQlrZXliZF9lbnZbaV0gPSAnMCcgKyAoKGtiZF9kYXRhID4+IGkpICYgMSk7Ci0JCXByaW50ZiAoIiAlYyIsIGtleWJkX2VudltpXSk7Ci0JfQotCWtleWJkX2VudltpXSA9ICdcMCc7Ci0JcHV0YyAoJ1xuJyk7Ci0Jc2V0ZW52ICgia2V5YmQiLCBrZXliZF9lbnYpOwotCXJldHVybiAwOwotfQotCi1VX0JPT1RfQ01EKAotCWtiZCwJMSwJMSwJZG9fa2JkLAotCSJyZWFkIGtleWJvYXJkIHN0YXR1cyIsCi0JIiIKLSk7Ci0KLSNpZmRlZiBDT05GSUdfTU9ERU1fU1VQUE9SVAotc3RhdGljIGludCBrZXlfcHJlc3NlZCh2b2lkKQotewotCXJldHVybiAoY29tcGFyZV9tYWdpYyhLQkRfREFUQSwgQ09ORklHX01PREVNX0tFWV9NQUdJQykgPT0gMCk7Ci19Ci0jZW5kaWYJLyogQ09ORklHX01PREVNX1NVUFBPUlQgKi8KLQotI2lmZGVmIENPTkZJR19TWVNfQlJJR0hUTkVTUwotCi1zdGF0aWMgaW5saW5lIHZvaWQgU0VUX0NTX1RPVUNIKHZvaWQpCi17Ci0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQotCWdwaW8tPnBkZGF0ICY9IDB4NUZGOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgQ0xSX0NTX1RPVUNIKHZvaWQpCi17Ci0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQotCWdwaW8tPnBkZGF0IHw9IDB4MjAwOwotfQotCi1zdGF0aWMgdm9pZCBzcGlfaW5pdCh2b2lkKQotewotCXN0cnVjdCBzM2MyNHgwX2dwaW8gKiBjb25zdCBncGlvID0gczNjMjR4MF9nZXRfYmFzZV9ncGlvKCk7Ci0Jc3RydWN0IHMzYzI0eDBfc3BpICogY29uc3Qgc3BpID0gczNjMjR4MF9nZXRfYmFzZV9zcGkoKTsKLQlpbnQgaTsKLQotCS8qIENvbmZpZ3VyZSBJL08gcG9ydHMuICovCi0JZ3Bpby0+cGRjb24gPSAoZ3Bpby0+cGRjb24gJiAweEYzRkZGRikgfCAweDA0MDAwMDsKLQlncGlvLT5wZ2NvbiA9IChncGlvLT5wZ2NvbiAmIDB4MEYzRkZGKSB8IDB4MDA4MDAwOwotCWdwaW8tPnBnY29uID0gKGdwaW8tPnBnY29uICYgMHgwQ0ZGRkYpIHwgMHgwMjAwMDA7Ci0JZ3Bpby0+cGdjb24gPSAoZ3Bpby0+cGdjb24gJiAweDAzRkZGRikgfCAweDA4MDAwMDsKLQotCUNMUl9DU19UT1VDSCgpOwotCi0Jc3BpLT5jaFswXS5zcHByZSA9IDB4MUY7IC8qIEJhdWRyYXRlIGNhLiA1MTRrSHogKi8KLQlzcGktPmNoWzBdLnNwcGluID0gMHgwMTsgIC8qIFNQSS1NT1NJIGhvbGRzIExldmVsIGFmdGVyIGxhc3QgYml0ICovCi0Jc3BpLT5jaFswXS5zcGNvbiA9IDB4MUE7IC8qIFBvbGxpbmcsIFByZXNjYWxlLCBNYXN0ZXIsIENQT0w9MCwgQ1BIQT0xICovCi0KLQkvKiBEdW1teSBieXRlIGVuc3VyZXMgY2xvY2sgdG8gYmUgbG93LiAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXNwaS0+Y2hbMF0uc3B0ZGF0ID0gMHhGRjsKLQl9Ci0Jd2FpdF90cmFuc21pdF9kb25lKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhaXRfdHJhbnNtaXRfZG9uZSh2b2lkKQotewotCXN0cnVjdCBzM2MyNHgwX3NwaSAqIGNvbnN0IHNwaSA9IHMzYzI0eDBfZ2V0X2Jhc2Vfc3BpKCk7Ci0KLQl3aGlsZSAoIShzcGktPmNoWzBdLnNwc3RhICYgMHgwMSkpIC8qIHdhaXQgdW50aWwgdHJhbnNmZXIgaXMgZG9uZSAqLwotCQk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRzYzIwMDBfd3JpdGUodW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCByZWcsCi0JCQkJCQkgIHVuc2lnbmVkIGludCBkYXRhKQotewotCXN0cnVjdCBzM2MyNHgwX3NwaSAqIGNvbnN0IHNwaSA9IHMzYzI0eDBfZ2V0X2Jhc2Vfc3BpKCk7Ci0JdW5zaWduZWQgaW50IGNvbW1hbmQ7Ci0KLQlTRVRfQ1NfVE9VQ0goKTsKLQljb21tYW5kID0gMHgwMDAwOwotCWNvbW1hbmQgfD0gKHBhZ2UgPDwgMTEpOwotCWNvbW1hbmQgfD0gKHJlZyA8PCA1KTsKLQotCXNwaS0+Y2hbMF0uc3B0ZGF0ID0gKGNvbW1hbmQgJiAweEZGMDApID4+IDg7Ci0Jd2FpdF90cmFuc21pdF9kb25lKCk7Ci0Jc3BpLT5jaFswXS5zcHRkYXQgPSAoY29tbWFuZCAmIDB4MDBGRik7Ci0Jd2FpdF90cmFuc21pdF9kb25lKCk7Ci0Jc3BpLT5jaFswXS5zcHRkYXQgPSAoZGF0YSAmIDB4RkYwMCkgPj4gODsKLQl3YWl0X3RyYW5zbWl0X2RvbmUoKTsKLQlzcGktPmNoWzBdLnNwdGRhdCA9IChkYXRhICYgMHgwMEZGKTsKLQl3YWl0X3RyYW5zbWl0X2RvbmUoKTsKLQotCUNMUl9DU19UT1VDSCgpOwotfQotCi1zdGF0aWMgdm9pZCB0c2MyMDAwX3NldF9icmlnaHRuZXNzKHZvaWQpCi17Ci0JY2hhciB0bXBbMTBdOwotCWludCBpLCBicjsKLQotCXNwaV9pbml0KCk7Ci0JdHNjMjAwMF93cml0ZSgxLCAyLCAweDApOyAvKiBQb3dlciB1cCBEQUMgKi8KLQotCWkgPSBnZXRlbnZfZigiYnJpZ2h0bmVzcyIsIHRtcCwgc2l6ZW9mKHRtcCkpOwotCWJyID0gKGkgPiAwKQotCQk/IChpbnQpIHNpbXBsZV9zdHJ0b3VsICh0bXAsIE5VTEwsIDEwKQotCQk6IENPTkZJR19TWVNfQlJJR0hUTkVTUzsKLQotCXRzYzIwMDBfd3JpdGUoMCwgMHhiLCBiciAmIDB4ZmYpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ01EX05FVAotaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENPTkZJR19DUzg5MDAKLQlyYyA9IGNzODkwMF9pbml0aWFsaXplKDAsIENPTkZJR19DUzg5MDBfQkFTRSk7Ci0jZW5kaWYKLQlyZXR1cm4gcmM7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvdHJhYl9ma3QuYyBiL2JvYXJkL3RyYWIvdHJhYl9ma3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUzZGFiMy4uMDAwMDAwMAotLS0gYS9ib2FyZC90cmFiL3RyYWJfZmt0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDE4ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDMKLSAqIE1hcnRpbiBLcmF1c2UsIFRRLVN5c3RlbXMgR21iSCwgbWFydGluLmtyYXVzZUB0cXMuZGUKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jZGVmaW5lCURFQlVHCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxleHBvcnRzLmg+Ci0jaW5jbHVkZSA8dGltZXN0YW1wLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KLSNpbmNsdWRlICJ0c2MyMDAwLmgiCi0jaW5jbHVkZSAicnM0ODUuaCIKLQotLyoKLSAqIGRlZmluZSwgdG8gd2FpdCBmb3IgdGhlIHRvdWNoIHRvIGJlIHByZXNzZWQsIGJlZm9yZSByZWFkaW5nIGNvb3JkaW5hdGVzIGluCi0gKiBjb21tYW5kIGRvX3RvdWNoLiBJZiBub3QgZGVmaW5lZCwgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLCB3aGVuIHRoZQotICogY29tbWFuZCBkb190b3VjaCBpcyBpbnZva2VkIGFuZCB0aGUgdG91Y2ggaXMgbm90IHByZXNzZWQgd2l0aGluIGFuIHNwZWNpZmljCi0gKiBpbnRlcnZhbC4KLSAqLwotI3VuZGVmCUNPTkZJR19UT1VDSF9XQUlUX1BSRVNTRUQKLQotLyogbWF4IHRpbWUgdG8gd2FpdCBmb3IgdG91Y2ggaXMgcHJlc3NlZCAqLwotI2lmbmRlZiBDT05GSUdfVE9VQ0hfV0FJVF9QUkVTU0VECi0jZGVmaW5lIFRPVUNIX1RJTUVPVVQgICA1Ci0jZW5kaWYgLyogIUNPTkZJR19UT1VDSF9XQUlUX1BSRVNTRUQgKi8KLQotLyogYXNzaWdubWVudCBvZiBDUFUgaW50ZXJuYWwgQURDIGNoYW5uZWxzIHdpdGggVFJBQiBoYXJkd2FyZSAqLwotI2RlZmluZSBWQ0M1ViAgIDIKLSNkZWZpbmUgVkNDMTJWICAzCi0KLS8qIENQTEQtUmVnaXN0ZXIgZm9yIGNvbnRyb2xsaW5nIFRSQUIgaGFyZHdhcmUgZnVuY3Rpb25zICovCi0jZGVmaW5lIENQTERfQlVUVE9OUyAgICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMjAwMDApCi0jZGVmaW5lIENQTERfRklMTF9MRVZFTCAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMDgwMDApCi0jZGVmaW5lIENQTERfUk9UQVJZX1NXSVRDSCAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMTgwMDApCi0jZGVmaW5lIENQTERfUlM0ODVfUkUgICAgICAgICAgICgodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKTB4MDQwMjgwMDApCi0KLS8qIHRpbWVyIGNvbmZpZ3VyYXRpb24gYml0cyBmb3IgYnV6emVyIGFuZCBQV00gKi8KLSNkZWZpbmUgU1RBUlQyCQkoMSA8PCAxMikKLSNkZWZpbmUgVVBEQVRFMiAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBJTlZFUlQyICAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIFJFTE9BRDIgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1RBUlQzCQkoMSA8PCAxNikKLSNkZWZpbmUgVVBEQVRFMyAgICAgICAgICgxIDw8IDE3KQotI2RlZmluZSBJTlZFUlQzICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFJFTE9BRDMgICAgICAgICAoMSA8PCAxOSkKLQotI2RlZmluZSBQQ0xLCQk2NjAwMDAwMAotI2RlZmluZSBCVVpaRVJfRlJFUSAgICAgMTAwMCAgICAvKiBmcmVxdWVuY3kgaW4gSHogKi8KLSNkZWZpbmUgUFdNX0ZSRVEgICAgICAgIDUwMAotCi0KLS8qIGRlZmluaXRpb25zIG9mIEkyQyBFRVBST00gZGV2aWNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgSTJDX0VFUFJPTV9ERVZfQUREUiAgICAgMHg1NAotCi0vKiBkZWZpbml0aW9uIGZvciB0b3VjaCBwYW5lbCBjYWxpYnJhdGlvbiBwb2ludHMgKi8KLSNkZWZpbmUgQ0FMSUJfVEwgMCAgICAgICAgICAgICAgLyogY2FsaWJyYXRpb24gcG9pbnQgaW4gKFQpb3AgKEwpZWZ0IGNvcm5lciAqLwotI2RlZmluZSBDQUxJQl9EUiAxICAgICAgICAgICAgICAvKiBjYWxpYnJhdGlvbiBwb2ludCBpbiAoRClvd24gKFIpaWdodCBjb3JuZXIgKi8KLQotLyogRUVQUk9NIGFkZHJlc3MgbWFwICovCi0jZGVmaW5lIFNFUklBTF9OVU1CRVIgICAgICAgICAgIDgKLSNkZWZpbmUgVE9VQ0hfWDAgICAgICAgICAgICAgICAgNTIKLSNkZWZpbmUgVE9VQ0hfWTAgICAgICAgICAgICAgICAgNTQKLSNkZWZpbmUgVE9VQ0hfWDEgICAgICAgICAgICAgICAgNTYKLSNkZWZpbmUgVE9VQ0hfWTEgICAgICAgICAgICAgICAgNTgKLSNkZWZpbmUgQ1JDMTYgICAgICAgICAgICAgICAgICAgNjAKLQotLyogRUVQUk9NIHN0dWZmICovCi0jZGVmaW5lIEVFUFJPTV9NQVhfQ1JDX0JVRiAgICAgIDY0Ci0KLS8qIFJTNDg1IHN0dWZmICovCi0jZGVmaW5lIFJTNDg1X01BWF9SRUNFSVZFX0JVRl9MRU4gIDEwMAotCi0vKiBCaXQgZGVmaW5pdGlvbnMgZm9yIEFEQ0NPTiAqLwotI2RlZmluZSBBRENfRU5BQkxFX1NUQVJUICAgICAweDEKLSNkZWZpbmUgQURDX1JFQURfU1RBUlQgICAgICAgMHgyCi0jZGVmaW5lIEFEQ19TVERCTSAgICAgICAgICAgIDB4NAotI2RlZmluZSBBRENfSU5QX0FJTjAgICAgICAgICAoMHgwIDw8IDMpCi0jZGVmaW5lIEFEQ19JTlBfQUlOMSAgICAgICAgICgweDEgPDwgMykKLSNkZWZpbmUgQURDX0lOUF9BSU4yICAgICAgICAgKDB4MiA8PCAzKQotI2RlZmluZSBBRENfSU5QX0FJTjMgICAgICAgICAoMHgzIDw8IDMpCi0jZGVmaW5lIEFEQ19JTlBfQUlONCAgICAgICAgICgweDQgPDwgMykKLSNkZWZpbmUgQURDX0lOUF9BSU41ICAgICAgICAgKDB4NSA8PCAzKQotI2RlZmluZSBBRENfSU5QX0FJTjYgICAgICAgICAoMHg2IDw8IDMpCi0jZGVmaW5lIEFEQ19JTlBfQUlONyAgICAgICAgICgweDcgPDwgMykKLSNkZWZpbmUgQURDX1BSU0NFTiAgICAgICAgICAgMHg0MDAwCi0jZGVmaW5lIEFEQ19FQ0ZMRyAgICAgICAgICAgIDB4ODAwMAotCi0vKiBmdW5jdGlvbiB0ZXN0IGZ1bmN0aW9ucyAqLwotaW50IGRvX2RpcCAodm9pZCk7Ci1pbnQgZG9faW5mbyAodm9pZCk7Ci1pbnQgZG9fdmNjNXYgKHZvaWQpOwotaW50IGRvX3ZjYzEydiAodm9pZCk7Ci1pbnQgZG9fYnV0dG9ucyAodm9pZCk7Ci1pbnQgZG9fZmlsbF9sZXZlbCAodm9pZCk7Ci1pbnQgZG9fcm90YXJ5X3N3aXRjaCAodm9pZCk7Ci1pbnQgZG9fcHJlc3N1cmUgKHZvaWQpOwotaW50IGRvX3ZfYmF0ICh2b2lkKTsKLWludCBkb192ZmRfaWQgKHZvaWQpOwotaW50IGRvX2J1enplciAoY2hhciAqIGNvbnN0ICopOwotaW50IGRvX2xlZCAoY2hhciAqIGNvbnN0ICopOwotaW50IGRvX2Z1bGxfYnJpZGdlIChjaGFyICogY29uc3QgKik7Ci1pbnQgZG9fZGFjIChjaGFyICogY29uc3QgKik7Ci1pbnQgZG9fbW90b3JfY29udGFjdCAodm9pZCk7Ci1pbnQgZG9fbW90b3IgKGNoYXIgKiBjb25zdCAqKTsKLWludCBkb19wd20gKGNoYXIgKiBjb25zdCAqKTsKLWludCBkb190aGVybW8gKGNoYXIgKiBjb25zdCAqKTsKLWludCBkb190b3VjaCAoY2hhciAqIGNvbnN0ICopOwotaW50IGRvX3JzNDg1IChjaGFyICogY29uc3QgKik7Ci1pbnQgZG9fc2VyaWFsX251bWJlciAoY2hhciAqIGNvbnN0ICopOwotaW50IGRvX2NyYzE2ICh2b2lkKTsKLWludCBkb19wb3dlcl9zd2l0Y2ggKHZvaWQpOwotaW50IGRvX2dhaW4gKGNoYXIgKiBjb25zdCAqKTsKLWludCBkb19lZXByb20gKGNoYXIgKiBjb25zdCAqKTsKLQotLyogaGVscGVyIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgYWRjX2luaXQgKHZvaWQpOwotc3RhdGljIGludCBhZGNfcmVhZCAodW5zaWduZWQgaW50IGNoYW5uZWwpOwotc3RhdGljIHZvaWQgcHJpbnRfaWRlbnRpZmllciAodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfVE9VQ0hfV0FJVF9QUkVTU0VECi1zdGF0aWMgdm9pZCB0b3VjaF93YWl0X3ByZXNzZWQgKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbnQgdG91Y2hfY2hlY2tfcHJlc3NlZCAodm9pZCk7Ci0jZW5kaWYgLyogQ09ORklHX1RPVUNIX1dBSVRfUFJFU1NFRCAqLwotCi1zdGF0aWMgdm9pZCB0b3VjaF9yZWFkX3hfeSAoaW50ICp4LCBpbnQgKnkpOwotc3RhdGljIGludCB0b3VjaF93cml0ZV9jbGlicmF0aW9uX3ZhbHVlcyAoaW50IGNhbGliX3BvaW50LCBpbnQgeCwgaW50IHkpOwotc3RhdGljIGludCByczQ4NV9zZW5kX2xpbmUgKGNvbnN0IGNoYXIgKmRhdGEpOwotc3RhdGljIGludCByczQ4NV9yZWNlaXZlX2NoYXJzIChjaGFyICpkYXRhLCBpbnQgdGltZW91dCk7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgdXBkY3JjKHVuc2lnbmVkIHNob3J0IGljcmMsIHVuc2lnbmVkIGNoYXIgKmljcCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGljbnQpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0kyQykKLXN0YXRpYyBpbnQgdHJhYl9lZXByb21fcmVhZCAoY2hhciAqIGNvbnN0ICphcmd2KTsKLXN0YXRpYyBpbnQgdHJhYl9lZXByb21fd3JpdGUgKGNoYXIgKiBjb25zdCAqYXJndik7Ci1pbnQgaTJjX3dyaXRlX211bHRpcGxlICh1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLAotCQkJaW50IGxlbik7Ci1pbnQgaTJjX3JlYWRfbXVsdGlwbGUgKCB1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLAotCQkJaW50IGxlbik7Ci0jZW5kaWYKLQotLyoKLSAqIFRSQUIgYm9hcmQgc3BlY2lmaWMgY29tbWFuZHMuIEVzcGVjaWFsbHkgY29tbWFuZHMgZm9yIGJ1cm4taW4gYW5kIGZ1bmN0aW9uCi0gKiB0ZXN0LgotICovCi0KLWludCB0cmFiX2ZrdCAoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCi17Ci0JaW50IGk7Ci0KLQlhcHBfc3RhcnR1cChhcmd2KTsKLQlpZiAoZ2V0X3ZlcnNpb24gKCkgIT0gWEZfVkVSU0lPTikgewotCQlwcmludGYgKCJXcm9uZyBYRl9WRVJTSU9OLiBQbGVhc2UgcmUtY29tcGlsZSB3aXRoIGFjdHVhbCAiCi0JCQkidS1ib290IHNvdXJjZXNcbiIpOwotCQlwcmludGYgKCJFeGFtcGxlIGV4cGVjdHMgQUJJIHZlcnNpb24gJWRcbiIsIFhGX1ZFUlNJT04pOwotCQlwcmludGYgKCJBY3R1YWwgVS1Cb290IEFCSSB2ZXJzaW9uICVkXG4iLCAoaW50KWdldF92ZXJzaW9uKCkpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlkZWJ1ZyAoImFyZ2MgPSAlZFxuIiwgYXJnYyk7Ci0KLQlmb3IgKGk9MDsgaTw9YXJnYzsgKytpKSB7Ci0JCWRlYnVnICgiYXJndlslZF0gPSBcIiVzXCJcbiIsIGksIGFyZ3ZbaV0gPyBhcmd2W2ldIDogIjxOVUxMPiIpOwotCX0KLQotCWFkY19pbml0ICgpOwotCi0Jc3dpdGNoIChhcmdjKSB7Ci0KLQljYXNlIDA6Ci0JY2FzZSAxOgotCQlicmVhazsKLQotCWNhc2UgMjoKLQkJaWYgKHN0cmNtcCAoYXJndlsxXSwgImluZm8iKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX2luZm8gKCkpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJkaXAiKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX2RpcCAoKSk7Ci0JCX0KLQkJaWYgKHN0cmNtcCAoYXJndlsxXSwgInZjYzV2IikgPT0gMCkgewotCQkJcmV0dXJuIChkb192Y2M1diAoKSk7Ci0JCX0KLQkJaWYgKHN0cmNtcCAoYXJndlsxXSwgInZjYzEydiIpID09IDApIHsKLQkJCXJldHVybiAoZG9fdmNjMTJ2ICgpKTsKLQkJfQotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAiYnV0dG9ucyIpID09IDApIHsKLQkJCXJldHVybiAoZG9fYnV0dG9ucyAoKSk7Ci0JCX0KLQkJaWYgKHN0cmNtcCAoYXJndlsxXSwgImZpbGxfbGV2ZWwiKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX2ZpbGxfbGV2ZWwgKCkpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJyb3Rhcnlfc3dpdGNoIikgPT0gMCkgewotCQkJcmV0dXJuIChkb19yb3Rhcnlfc3dpdGNoICgpKTsKLQkJfQotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAicHJlc3N1cmUiKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX3ByZXNzdXJlICgpKTsKLQkJfQotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAidl9iYXQiKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX3ZfYmF0ICgpKTsKLQkJfQotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAidmZkX2lkIikgPT0gMCkgewotCQkJcmV0dXJuIChkb192ZmRfaWQgKCkpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJtb3Rvcl9jb250YWN0IikgPT0gMCkgewotCQkJcmV0dXJuIChkb19tb3Rvcl9jb250YWN0ICgpKTsKLQkJfQotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAiY3JjMTYiKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX2NyYzE2ICgpKTsKLQkJfQotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAicG93ZXJfc3dpdGNoIikgPT0gMCkgewotCQkJcmV0dXJuIChkb19wb3dlcl9zd2l0Y2ggKCkpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSAzOgotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAiZnVsbF9icmlkZ2UiKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX2Z1bGxfYnJpZGdlIChhcmd2KSk7Ci0JCX0KLQkJaWYgKHN0cmNtcCAoYXJndlsxXSwgImRhYyIpID09IDApIHsKLQkJCXJldHVybiAoZG9fZGFjIChhcmd2KSk7Ci0JCX0KLQkJaWYgKHN0cmNtcCAoYXJndlsxXSwgIm1vdG9yIikgPT0gMCkgewotCQkJcmV0dXJuIChkb19tb3RvciAoYXJndikpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJwd20iKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX3B3bSAoYXJndikpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJ0aGVybW8iKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX3RoZXJtbyAoYXJndikpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJ0b3VjaCIpID09IDApIHsKLQkJCXJldHVybiAoZG9fdG91Y2ggKGFyZ3YpKTsKLQkJfQotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAic2VyaWFsX251bWJlciIpID09IDApIHsKLQkJCXJldHVybiAoZG9fc2VyaWFsX251bWJlciAoYXJndikpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJidXp6ZXIiKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX2J1enplciAoYXJndikpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJnYWluIikgPT0gMCkgewotCQkJcmV0dXJuIChkb19nYWluIChhcmd2KSk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIDQ6Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJsZWQiKSA9PSAwKSB7Ci0JCQlyZXR1cm4gKGRvX2xlZCAoYXJndikpOwotCQl9Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJyczQ4NSIpID09IDApIHsKLQkJCXJldHVybiAoZG9fcnM0ODUgKGFyZ3YpKTsKLQkJfQotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAic2VyaWFsX251bWJlciIpID09IDApIHsKLQkJCXJldHVybiAoZG9fc2VyaWFsX251bWJlciAoYXJndikpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSA1OgotCQlpZiAoc3RyY21wIChhcmd2WzFdLCAiZWVwcm9tIikgPT0gMCkgewotCQkJcmV0dXJuIChkb19lZXByb20gKGFyZ3YpKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgNjoKLQkJaWYgKHN0cmNtcCAoYXJndlsxXSwgImVlcHJvbSIpID09IDApIHsKLQkJCXJldHVybiAoZG9fZWVwcm9tIChhcmd2KSk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlwcmludGYgKCJVc2FnZTpcbjxjb21tYW5kPiA8cGFyYW1ldGVyMT4gPHBhcmFtZXRlcjI+IC4uLlxuIik7Ci0JcmV0dXJuIDE7Ci19Ci0KLXZvaWQgaGFuZyAodm9pZCkKLXsKLQlwdXRzICgiIyMjIEVSUk9SICMjIyBQbGVhc2UgUkVTRVQgdGhlIGJvYXJkICMjI1xuIik7Ci0JZm9yICg7Oyk7Ci19Ci0KLWludCBkb19pbmZvICh2b2lkKQotewotCXByaW50ZiAoIlN0YW5kLWFsb25lIGFwcGxpY2F0aW9uIGZvciBUUkFCIGJvYXJkIGZ1bmN0aW9uIHRlc3RcbiIpOwotCXByaW50ZiAoIkJ1aWx0OiAlcyBhdCAlc1xuIiwgVV9CT09UX0RBVEUsIFVfQk9PVF9USU1FKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgZG9fZGlwICh2b2lkKQotewotCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwotCWludCBhZGNfdmFsOwotCWludCBpOwotCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JIERJUCBzd2l0Y2ggY29ubmVjdGlvbiAoYWNjb3JkaW5nIHRvIHdhNC1jcHUuc3AuMzAxLnBkZiwgcGFnZSAzKToKLQkgICBTVzEgLSBBSU40Ci0JICAgU1cyIC0gQUlONQotCSAgIFNXMyAtIEFJTjYKLQkgICBTVzQgLSBBSU43Ci0KLQkgICAiT24iIERJUCBzd2l0Y2ggcG9zaXRpb24gc2hvcnQtY2lyY3VpdHMgdGhlIHZvbHRhZ2UgZnJvbQotCSAgIHRoZSBpbnB1dCBjaGFubmVsIChpLmUuICcwJyBjb252ZXJzaW9uIHJlc3VsdCBtZWFucyAib24iKS4KLQkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0JZm9yIChpID0gNzsgaSA+IDM7IGktLSkgewotCi0JCWlmICgoYWRjX3ZhbCA9IGFkY19yZWFkIChpKSkgPT0gLTEpIHsKLQkJCXByaW50ZiAoIkNoYW5uZWwgJWQgY291bGQgbm90IGJlIHJlYWRcbiIsIGkpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQotCQkvKgotCQkgKiBJbnB1dCB2b2x0YWdlIChzd2l0Y2ggb3BlbikgaXMgMS44IFYuCi0JCSAqIChWaW5fSGlnaC9WUmVmKSphZGNfcmVzID0gKDEsOFYvMiw1VikqMTAyMykgPSA3MzYKLQkJICogU2V0IHRyaWdnZXIgYXQgaGFsdmUgdGhhdCB2YWx1ZS4KLQkJICovCi0JCWlmIChhZGNfdmFsIDwgMzY4KQotCQkJcmVzdWx0IHw9ICgxIDw8IChpLTQpKTsKLQl9Ci0KLQkvKiBwcmludCByZXN1bHQgdG8gY29uc29sZSAqLwotCXByaW50X2lkZW50aWZpZXIgKCk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAoKHJlc3VsdCAmICgxIDw8IGkpKSA9PSAwKQotCQkJcHJpbnRmKCIwIik7Ci0JCWVsc2UKLQkJCXByaW50ZigiMSIpOwotCX0KLQlwcmludGYoIlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgZG9fdmNjNXYgKHZvaWQpCi17Ci0JaW50IHJlc3VsdDsKLQotCS8qIFZDQzVWIGlzIGNvbm5lY3RlZCB0byBjaGFubmVsIDIgKi8KLQotCWlmICgocmVzdWx0ID0gYWRjX3JlYWQgKFZDQzVWKSkgPT0gLTEpIHsKLQkJcHJpbnRmICgiVkNDNVYgY291bGQgbm90IGJlIHJlYWRcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSB2b2x0YWdlIHZhbHVlLiBTcGxpdCBpbiB0d28gcGFydHMgYmVjYXVzZSB0aGVyZSBpcyBubwotCSAqIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQuICBWQ0M1ViBpcyBjb25uZWN0ZWQgb3ZlciBhbiByZXNpc3RvciBkaXZpZGVyOgotCSAqIFZDQzVWPUFEQ3ZhbCoyLDVWLzEwMjMqKDEwSyszMEspLzEwSy4KLQkgKi8KLQlwcmludF9pZGVudGlmaWVyICgpOwotCXByaW50ZiAoIiVkIiwgKHJlc3VsdCAmIDB4M0ZGKSogMTAgLyAxMDIzKTsKLQlwcmludGYgKCIuJWQiLCAoKHJlc3VsdCAmIDB4M0ZGKSogMTAgJSAxMDIzKSogMTAgLyAxMDIzKTsKLQlwcmludGYgKCIlZCBWXG4iLCAoKChyZXN1bHQgJiAweDNGRikgKiAxMCAlIDEwMjMgKSAqIDEwICUgMTAyMykKLQkJKiAxMCAvIDEwMjQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IGRvX3ZjYzEydiAodm9pZCkKLXsKLQlpbnQgcmVzdWx0OwotCi0JaWYgKChyZXN1bHQgPSBhZGNfcmVhZCAoVkNDMTJWKSkgPT0gLTEpIHsKLQkJcHJpbnRmICgiVkNDMTJWIGNvdWxkIG5vdCBiZSByZWFkXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyoKLQkgKiBDYWxjdWxhdGUgdm9sdGFnZSB2YWx1ZS4gU3BsaXQgaW4gdHdvIHBhcnRzIGJlY2F1c2UgdGhlcmUgaXMgbm8KLQkgKiBmbG9hdGluZyBwb2ludCBzdXBwb3J0LiAgVkNDNVYgaXMgY29ubmVjdGVkIG92ZXIgYW4gcmVzaXN0b3IgZGl2aWRlcjoKLQkgKiBWQ0MxMlY9QURDdmFsKjIsNVYvMTAyMyooMzBLKzI3MEspLzMwSy4KLQkgKi8KLQlwcmludF9pZGVudGlmaWVyICgpOwotCXByaW50ZiAoIiVkIiwgKHJlc3VsdCAmIDB4M0ZGKSogMjUgLyAxMDIzKTsKLQlwcmludGYgKCIuJWQgVlxuIiwgKChyZXN1bHQgJiAweDNGRikqIDI1ICUgMTAyMykgKiAxMCAvIDEwMjMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRjX3JlYWQgKHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCWludCBqID0gMTAwMDsgLyogdGltZW91dCB2YWx1ZSBmb3Igd2FpdCBsb29wIGluIHVzICovCi0JaW50IHJlc3VsdDsKLQlzdHJ1Y3QgczNjMjQwMF9hZGMgKnBhZGM7Ci0KLQlwYWRjID0gczNjMjQwMF9nZXRfYmFzZV9hZGMoKTsKLQljaGFubmVsICY9IDB4NzsKLQotCXBhZGMtPmFkY2NvbiAmPSB+QURDX1NUREJNOyAvKiBzZWxlY3Qgbm9ybWFsIG1vZGUgKi8KLQlwYWRjLT5hZGNjb24gJj0gfigweDcgPDwgMyk7IC8qIGNsZWFyIHRoZSBjaGFubmVsIGJpdHMgKi8KLQlwYWRjLT5hZGNjb24gfD0gKChjaGFubmVsIDw8IDMpIHwgQURDX0VOQUJMRV9TVEFSVCk7Ci0KLQl3aGlsZSAoai0tKSB7Ci0JCWlmICgocGFkYy0+YWRjY29uICYgQURDX0VOQUJMRV9TVEFSVCkgPT0gMCkKLQkJCWJyZWFrOwotCQl1ZGVsYXkgKDEpOwotCX0KLQotCWlmIChqID09IDApIHsKLQkJcHJpbnRmKCIlczogQURDIHRpbWVvdXRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXBhZGMtPmFkY2NvbiB8PSBBRENfU1REQk07IC8qIHNlbGVjdCBzdGFuZGJ5IG1vZGUgKi8KLQkJcmV0dXJuIC0xOwotCX0KLQotCXJlc3VsdCA9IHBhZGMtPmFkY2RhdCAmIDB4M0ZGOwotCi0JcGFkYy0+YWRjY29uIHw9IEFEQ19TVERCTTsgLyogc2VsZWN0IHN0YW5kYnkgbW9kZSAqLwotCi0JZGVidWcgKCIlczogY2hhbm5lbCAlZCwgcmVzdWx0W0RJR0lUXT0lZFxuIiwgX19GVU5DVElPTl9fLAotCSAgICAgICAocGFkYy0+YWRjY29uID4+IDMpICYgMHg3LCByZXN1bHQpOwotCi0JLyoKLQkgKiBXYWl0IGZvciBBREMgdG8gYmUgcmVhZHkgZm9yIG5leHQgY29udmVyc2lvbi4gVGhpcyBkZWxheSB2YWx1ZSB3YXMKLQkgKiBlc3RpbWF0ZWQsIGJlY2F1c2UgdGhlIGRhdGFzaGVldCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUuCi0JICovCi0JdWRlbGF5ICgxMDAwKTsKLQotCXJldHVybiAocmVzdWx0KTsKLX0KLQotCi1zdGF0aWMgdm9pZCBhZGNfaW5pdCAodm9pZCkKLXsKLQlzdHJ1Y3QgczNjMjQwMF9hZGMgKnBhZGM7Ci0KLQlwYWRjID0gczNjMjQwMF9nZXRfYmFzZV9hZGMoKTsKLQotCXBhZGMtPmFkY2NvbiAmPSB+KDB4ZmYgPDwgNik7IC8qIGNsZWFyIHByZXNjYWxlciBiaXRzICovCi0JcGFkYy0+YWRjY29uIHw9ICgoNjUgPDwgNikgfCBBRENfUFJTQ0VOKTsgLyogc2V0IHByZXNjYWxlciAqLwotCi0JLyoKLQkgKiBXYWl0IHNvbWUgdGltZSB0byBhdm9pZCBwcm9ibGVtIHdpdGggdmVyeSBmaXJzdCBjYWxsIG9mCi0JICogYWRjX3JlYWQoKS4gV2l0aG91dCAqIHRoaXMgZGVsYXksIHNvbWV0aW1lcyB0aGUgZmlyc3QgcmVhZCBhZGMKLQkgKiB2YWx1ZSBpcyAwLiBQZXJoYXBzIGJlY2F1c2UgdGhlICogYWRqdXN0bWVudCBvZiBwcmVzY2FsZXIgdGFrZXMKLQkgKiBzb21lIGNsb2NrIGN5Y2xlcz8KLQkgKi8KLQl1ZGVsYXkgKDEwMDApOwotCi0JcmV0dXJuOwotfQotCi0KLWludCBkb19idXR0b25zICh2b2lkKQotewotCWludCByZXN1bHQ7Ci0JaW50IGk7Ci0KLQlyZXN1bHQgPSAqQ1BMRF9CVVRUT05TOyAvKiByZWFkIENQTEQgKi8KLQlkZWJ1ZyAoIiVzOiBjcGxkX3Rhc3RlciAoMzIgYml0KSAlI3hcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQotCS8qIHByaW50IHJlc3VsdCB0byBjb25zb2xlICovCi0JcHJpbnRfaWRlbnRpZmllciAoKTsKLQlmb3IgKGkgPSAxNjsgaSA8PSAxOTsgaSsrKSB7Ci0JCWlmICgocmVzdWx0ICYgKDEgPDwgaSkpID09IDApCi0JCQlwcmludGYoIjAiKTsKLQkJZWxzZQotCQkJcHJpbnRmKCIxIik7Ci0JfQotCXByaW50ZigiXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgZG9fcG93ZXJfc3dpdGNoICh2b2lkKQotewotCWludCByZXN1bHQ7Ci0KLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCi0JLyogY29uZmlndXJlIEdQRTcgYXMgaW5wdXQgKi8KLQlncGlvLT5wZWNvbiAmPSB+KDB4MyA8PCAoMiAqIDcpKTsKLQotCS8qIHNpZ25hbCBHUEU3IGZyb20gcG93ZXIgc3dpdGNoIGlzIGxvdyBhY3RpdmU6IDA9b24gLCAxPW9mZiAqLwotCXJlc3VsdCA9ICgoZ3Bpby0+cGVkYXQgJiAoMSA8PCA3KSkgPT0gKDEgPDwgNykpID8gMCA6IDE7Ci0KLQlwcmludF9pZGVudGlmaWVyICgpOwotCXByaW50ZigiJWRcbiIsIHJlc3VsdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IGRvX2ZpbGxfbGV2ZWwgKHZvaWQpCi17Ci0JaW50IHJlc3VsdDsKLQotCXJlc3VsdCA9ICpDUExEX0ZJTExfTEVWRUw7IC8qIHJlYWQgQ1BMRCAqLwotCWRlYnVnICgiJXM6IGNwbGRfZnVlbGxzdGFuZCAoMzIgYml0KSAlI3hcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQotCS8qIHByaW50IHJlc3VsdCB0byBjb25zb2xlICovCi0JcHJpbnRfaWRlbnRpZmllciAoKTsKLQlpZiAoKHJlc3VsdCAmICgxIDw8IDE2KSkgPT0gMCkKLQkJcHJpbnRmKCIwXG4iKTsKLQllbHNlCi0JCXByaW50ZigiMVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IGRvX3JvdGFyeV9zd2l0Y2ggKHZvaWQpCi17Ci0JaW50IHJlc3VsdDsKLQkvKgotCSAqIFBsZWFzZSBub3RlLCB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgZGlyZWN0aW9uIGJpdHMgYXJlCi0JICogdW5kZWZpbmVkIGFmdGVyIHJlc2V0LiBTbyBpdCBpcyBhIGdvb2QgaWRlYSwgdG8gbWFrZSBmaXJzdCBhIGR1bW15Ci0JICogY2FsbCB0byB0aGlzIGZ1bmN0aW9uLCB0byBjbGVhciB0aGUgZGlyZWN0aW9uIGJpdHMgYW5kIHNldCBzbyB0bwotCSAqIHByb3BlciB2YWx1ZXMuCi0JICovCi0KLQlyZXN1bHQgPSAqQ1BMRF9ST1RBUllfU1dJVENIOyAvKiByZWFkIENQTEQgKi8KLQlkZWJ1ZyAoIiVzOiBjcGxkX2luYyAoMzIgYml0KSAlI3hcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQotCSpDUExEX1JPVEFSWV9TV0lUQ0ggfD0gKDMgPDwgMTYpOyAvKiBjbGVhciBkaXJlY3Rpb24gYml0cyBpbiBDUExEICovCi0KLQkvKiBwcmludCByZXN1bHQgdG8gY29uc29sZSAqLwotCXByaW50X2lkZW50aWZpZXIgKCk7Ci0JaWYgKChyZXN1bHQgJiAoMSA8PCAxNikpID09ICgxIDw8IDE2KSkKLQkJcHJpbnRmKCJSIik7Ci0JaWYgKChyZXN1bHQgJiAoMSA8PCAxNykpID09ICgxIDw8IDE3KSkKLQkJcHJpbnRmKCJMIik7Ci0JaWYgKCgocmVzdWx0ICYgKDEgPDwgMTYpKSA9PSAwKSAmJiAoKHJlc3VsdCAmICgxIDw8IDE3KSkgPT0gMCkpCi0JCXByaW50ZigiMCIpOwotCWlmICgocmVzdWx0ICYgKDEgPDwgMTgpKSA9PSAwKQotCQlwcmludGYoIjBcbiIpOwotCWVsc2UKLQkJcHJpbnRmKCIxXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgZG9fdmZkX2lkICh2b2lkKQotewotCWludCBpOwotCWxvbmcgaW50IHBjdXBfb2xkLCBwY2Nvbl9vbGQ7Ci0JaW50IHZmZF9ib2FyZF9pZDsKLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCi0JLyogdHJ5IHRvIHJlZCB2ZmQgYm9hcmQgaWQgZnJvbSB0aGUgdmFsdWUgZGVmaW5lZCBieSBwdWxsLXVwcyAqLwotCi0JcGN1cF9vbGQgPSBncGlvLT5wY3VwOwotCXBjY29uX29sZCA9IGdwaW8tPnBjY29uOwotCi0JZ3Bpby0+cGN1cCA9IChncGlvLT5wY3VwICYgMHhGRkYwKTsgLyogYWN0aXZhdGUgIEdQQzAuLi5HUEMzIHB1bGwtdXBzICovCi0JZ3Bpby0+cGNjb24gPSAoZ3Bpby0+cGNjb24gJiAweEZGRkZGRjAwKTsgLyogY29uZmlndXJlIEdQQzAuLi5HUEMzIGFzCi0JCQkJCQkgICAqIGlucHV0cyAqLwotCXVkZWxheSAoMTApOyAgICAgICAgICAgIC8qIGFsbG93IHNpZ25hbHMgdG8gc2V0dGxlICovCi0JdmZkX2JvYXJkX2lkID0gKH5ncGlvLT5wY2RhdCkgJiAweDAwMEY7CS8qIHJlYWQgR1BDMC4uLkdQQzMgcG9ydCBwaW5zICovCi0KLQlncGlvLT5wY2NvbiA9IHBjY29uX29sZDsKLQlncGlvLT5wY3VwID0gcGN1cF9vbGQ7Ci0KLQkvKiBwcmludCB2ZmRfYm9hcmRfaWQgdG8gY29uc29sZSAqLwotCXByaW50X2lkZW50aWZpZXIgKCk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAoKHZmZF9ib2FyZF9pZCAmICgxIDw8IGkpKSA9PSAwKQotCQkJcHJpbnRmKCIwIik7Ci0JCWVsc2UKLQkJCXByaW50ZigiMSIpOwotCX0KLQlwcmludGYoIlxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkb19idXp6ZXIgKGNoYXIgKiBjb25zdCAqYXJndikKLXsKLQlpbnQgY291bnRlcjsKLQotCXN0cnVjdCBzM2MyNHgwX3RpbWVycyAqIGNvbnN0IHRpbWVycyA9IHMzYzI0eDBfZ2V0X2Jhc2VfdGltZXJzKCk7Ci0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQotCS8qIHNldCBwcmVzY2FsZXIgZm9yIHRpbWVyIDIsIDMgYW5kIDQgKi8KLQl0aW1lcnMtPnRjZmcwICY9IH4weEZGMDA7Ci0JdGltZXJzLT50Y2ZnMCB8PSAgMHgwRjAwOwotCi0JLyogc2V0IGRpdmlkZXIgZm9yIHRpbWVyIDIgKi8KLQl0aW1lcnMtPnRjZmcxICY9IH4weEYwMDsKLQl0aW1lcnMtPnRjZmcxIHw9ICAweDMwMDsKLQotCS8qIHNldCBmcmVxdWVuY3kgKi8KLQljb3VudGVyID0gKFBDTEsgLyBCVVpaRVJfRlJFUSkgPj4gOTsKLQl0aW1lcnMtPmNoWzJdLnRjbnRiID0gY291bnRlcjsKLQl0aW1lcnMtPmNoWzJdLnRjbXBiID0gY291bnRlciAvIDI7Ci0KLQlpZiAoc3RyY21wIChhcmd2WzJdLCAib24iKSA9PSAwKSB7Ci0JCWRlYnVnICgiJXM6IGZyZXF1ZW5jeTogJWRcbiIsIF9fRlVOQ1RJT05fXywKLQkJICAgICAgIEJVWlpFUl9GUkVRKTsKLQotCQkvKiBjb25maWd1cmUgcGluIEdQRDcgYXMgVE9VVDIgKi8KLQkJZ3Bpby0+cGRjb24gJj0gfjB4QzAwMDsKLQkJZ3Bpby0+cGRjb24gfD0gMHg4MDAwOwotCi0JCS8qIHN0YXJ0ICovCi0JCXRpbWVycy0+dGNvbiA9ICh0aW1lcnMtPnRjb24gfCBVUERBVEUyIHwgUkVMT0FEMikgJgotCQkJCX5JTlZFUlQyOwotCQl0aW1lcnMtPnRjb24gPSAodGltZXJzLT50Y29uIHwgU1RBUlQyKSAmIH5VUERBVEUyOwotCQlyZXR1cm4gKDApOwotCX0KLQllbHNlIGlmIChzdHJjbXAgKGFyZ3ZbMl0sICJvZmYiKSA9PSAwKSB7Ci0JCS8qIHN0b3AgKi8KLQkJdGltZXJzLT50Y29uICY9IH4oU1RBUlQyIHwgUkVMT0FEMik7Ci0KLQkJLyogY29uZmlndXJlIEdQRDcgYXMgb3V0cHV0IGFuZCBzZXQgdG8gbG93ICovCi0JCWdwaW8tPnBkY29uICY9IH4weEMwMDA7Ci0JCWdwaW8tPnBkY29uIHw9IDB4NDAwMDsKLQkJZ3Bpby0+cGRkYXQgJj0gfjB4ODA7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JcHJpbnRmICgiJXM6IGludmFsaWQgcGFyYW1ldGVyICVzXG4iLCBfX0ZVTkNUSU9OX18sIGFyZ3ZbMl0pOwotCXJldHVybiAxOwotfQotCi0KLWludCBkb19sZWQgKGNoYXIgKiBjb25zdCAqYXJndikKLXsKLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCi0JLyogY29uZmlndXJlIFBDMTQgYW5kIFBDMTUgYXMgb3V0cHV0ICovCi0JZ3Bpby0+cGNjb24gJj0gfigweEYgPDwgMjgpOwotCWdwaW8tPnBjY29uIHw9ICgweDUgPDwgMjgpOwotCi0JLyogY29uZmlndXJlIFBEMCBhbmQgUEQ0IGFzIG91dHB1dCAqLwotCWdwaW8tPnBkY29uICY9IH4oKDB4MyA8PCA4KSB8IDB4Myk7Ci0JZ3Bpby0+cGRjb24gfD0gKCgweDEgPDwgOCkgfCAweDEpOwotCi0Jc3dpdGNoIChzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxMCkpIHsKLQotCWNhc2UgMDoKLQljYXNlIDE6Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQlpZiAoc3RyY21wIChhcmd2WzNdLCAib24iKSA9PSAwKQotCQkJZ3Bpby0+cGNkYXQgfD0gKDEgPDwgMTQpOwotCQllbHNlCi0JCQlncGlvLT5wY2RhdCAmPSB+KDEgPDwgMTQpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgMzoKLQkJaWYgKHN0cmNtcCAoYXJndlszXSwgIm9uIikgPT0gMCkKLQkJCWdwaW8tPnBjZGF0IHw9ICgxIDw8IDE1KTsKLQkJZWxzZQotCQkJZ3Bpby0+cGNkYXQgJj0gfigxIDw8IDE1KTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIDQ6Ci0JCWlmIChzdHJjbXAgKGFyZ3ZbM10sICJvbiIpID09IDApCi0JCQlncGlvLT5wZGRhdCB8PSAoMSA8PCAwKTsKLQkJZWxzZQotCQkJZ3Bpby0+cGRkYXQgJj0gfigxIDw8IDApOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgNToKLQkJaWYgKHN0cmNtcCAoYXJndlszXSwgIm9uIikgPT0gMCkKLQkJCWdwaW8tPnBkZGF0IHw9ICgxIDw8IDQpOwotCQllbHNlCi0JCQlncGlvLT5wZGRhdCAmPSB+KDEgPDwgNCk7Ci0JCXJldHVybiAwOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0KLQl9Ci0JcHJpbnRmICgiJXM6IGludmFsaWQgcGFyYW1ldGVyICVzXG4iLCBfX0ZVTkNUSU9OX18sIGFyZ3ZbMl0pOwotCXJldHVybiAxOwotfQotCi0KLWludCBkb19mdWxsX2JyaWRnZSAoY2hhciAqIGNvbnN0ICphcmd2KQotewotCXN0cnVjdCBzM2MyNHgwX2dwaW8gKiBjb25zdCBncGlvID0gczNjMjR4MF9nZXRfYmFzZV9ncGlvKCk7Ci0KLQkvKiBjb25maWd1cmUgUEQ1IGFuZCBQRDYgYXMgb3V0cHV0ICovCi0JZ3Bpby0+cGRjb24gJj0gfigoMHgzIDw8IDUqMikgfCAoMHgzIDw8IDYqMikpOwotCWdwaW8tPnBkY29uIHw9ICgoMHgxIDw8IDUqMikgfCAoMHgxIDw8IDYqMikpOwotCi0JaWYgKHN0cmNtcCAoYXJndlsyXSwgIisiKSA9PSAwKSB7Ci0JCWdwaW8tPnBkZGF0IHw9ICgxIDw8IDUpOwotCSAgICAgIGdwaW8tPnBkZGF0IHw9ICgxIDw8IDYpOwotCSAgICAgIHJldHVybiAwOwotCX0KLQllbHNlIGlmIChzdHJjbXAgKGFyZ3ZbMl0sICItIikgPT0gMCkgewotCQlncGlvLT5wZGRhdCAmPSB+KDEgPDwgNSk7Ci0JCWdwaW8tPnBkZGF0IHw9ICgxIDw8IDYpOwotCQlyZXR1cm4gMDsKLQl9Ci0JZWxzZSBpZiAoc3RyY21wIChhcmd2WzJdLCAib2ZmIikgPT0gMCkgewotCQlncGlvLT5wZGRhdCAmPSB+KDEgPDwgNSk7Ci0JCWdwaW8tPnBkZGF0ICY9IH4oMSA8PCA2KTsKLQkJcmV0dXJuIDA7Ci0JfQotCXByaW50ZiAoIiVzOiBpbnZhbGlkIHBhcmFtZXRlciAlc1xuIiwgX19GVU5DVElPTl9fLCBhcmd2WzJdKTsKLQlyZXR1cm4gMTsKLX0KLQotLyogdmFsIG11c3QgYmUgaW4gWzAsIDQwOTVdICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdHNjMjAwMF90b191diAodTE2IHZhbCkKLXsKLQlyZXR1cm4gKCgyNTAwMDAgKiB2YWwpIC8gNDA5NikgKiAxMDsKLX0KLQotCi1pbnQgZG9fZGFjIChjaGFyICogY29uc3QgKmFyZ3YpCi17Ci0JaW50IGJyaWdodG5lc3M7Ci0KLQkvKiBpbml0aWFsaXplIFNQSSAqLwotCXRzYzIwMDBfc3BpX2luaXQgKCk7Ci0KLQlpZiAgKCgoYnJpZ2h0bmVzcyA9IHNpbXBsZV9zdHJ0b3VsIChhcmd2WzJdLCBOVUxMLCAxMCkpIDwgMCkgfHwKLQkgICAgIChicmlnaHRuZXNzID4gMjU1KSkgewotCQlwcmludGYgKCIlczogaW52YWxpZCBwYXJhbWV0ZXIgJXNcbiIsIF9fRlVOQ1RJT05fXywgYXJndlsyXSk7Ci0JCXJldHVybiAxOwotCX0KLQl0c2MyMDAwX3dyaXRlKFRTQzIwMDBfUkVHX0RBQ0NUTCwgMHgwKTsgLyogUG93ZXIgdXAgREFDICovCi0JdHNjMjAwMF93cml0ZShUU0MyMDAwX1JFR19EQUMsIGJyaWdodG5lc3MgJiAweGZmKTsKLQotCXJldHVybiAwOwotfQotCi0KLWludCBkb192X2JhdCAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldCwgcmVzOwotCi0JLyogaW5pdGlhbGl6ZSBTUEkgKi8KLQlzcGlfaW5pdCAoKTsKLQotCXRzYzIwMDBfd3JpdGUoVFNDMjAwMF9SRUdfQURDLCAweDE4MzYpOwotCi0JLyogbm93IHdhaXQgZm9yIGRhdGEgYXZhaWxhYmxlICovCi0JYWRjX3dhaXRfY29udmVyc2lvbl9kb25lKCk7Ci0KLQlyZXQgPSB0c2MyMDAwX3JlYWQoVFNDMjAwMF9SRUdfQkFUMSk7Ci0JcmVzID0gKHRzYzIwMDBfdG9fdXYocmV0KSArIDEyNTApIC8gMjUwMDsKLQlyZXMgKz0gKEVSUk9SX0JBVFRFUlkgKiByZXMpIC8gMTAwMDsKLQotCXByaW50X2lkZW50aWZpZXIgKCk7Ci0JcHJpbnRmICgiJWxkIiwgKHJlcyAvIDEwMCkpOwotCXByaW50ZiAoIi4lbGQiLCAoKHJlcyAlIDEwMCkgLyAxMCkpOwotCXByaW50ZiAoIiVsZCBWXG4iLCAocmVzICUgMTApKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgZG9fcHJlc3N1cmUgKHZvaWQpCi17Ci0JLyogaW5pdGlhbGl6ZSBTUEkgKi8KLQlzcGlfaW5pdCAoKTsKLQotCXRzYzIwMDBfd3JpdGUoVFNDMjAwMF9SRUdfQURDLCAweDI0MzYpOwotCi0JLyogbm93IHdhaXQgZm9yIGRhdGEgYXZhaWxhYmxlICovCi0JYWRjX3dhaXRfY29udmVyc2lvbl9kb25lKCk7Ci0KLQlwcmludF9pZGVudGlmaWVyICgpOwotCXByaW50ZiAoIiVkXG4iLCB0c2MyMDAwX3JlYWQoVFNDMjAwMF9SRUdfQVVYMikpOwotCXJldHVybiAwOwotfQotCi0KLWludCBkb19tb3Rvcl9jb250YWN0ICh2b2lkKQotewotCWludCByZXN1bHQ7Ci0KLQlyZXN1bHQgPSAqQ1BMRF9GSUxMX0xFVkVMOyAvKiByZWFkIENQTEQgKi8KLQlkZWJ1ZyAoIiVzOiBjcGxkX2Z1ZWxsc3RhbmQgKDMyIGJpdCkgJSN4XG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Ci0KLQkvKiBwcmludCByZXN1bHQgdG8gY29uc29sZSAqLwotCXByaW50X2lkZW50aWZpZXIgKCk7Ci0JaWYgKChyZXN1bHQgJiAoMSA8PCAxNykpID09IDApCi0JCXByaW50ZigiMFxuIik7Ci0JZWxzZQotCQlwcmludGYoIjFcbiIpOwotCXJldHVybiAwOwotfQotCi1pbnQgZG9fbW90b3IgKGNoYXIgKiBjb25zdCAqYXJndikKLXsKLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCi0JLyogQ29uZmlndXJlIEkvTyBwb3J0ICovCi0JZ3Bpby0+cGdjb24gJj0gfigweDMgPDwgMCk7Ci0JZ3Bpby0+cGdjb24gfD0gKDB4MSA8PCAwKTsKLQotCWlmIChzdHJjbXAgKGFyZ3ZbMl0sICJvbiIpID09IDApIHsKLQkJZ3Bpby0+cGdkYXQgJj0gfigxIDw8IDApOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKHN0cmNtcCAoYXJndlsyXSwgIm9mZiIpID09IDApIHsKLQkJZ3Bpby0+cGdkYXQgfD0gKDEgPDwgMCk7Ci0JCXJldHVybiAwOwotCX0KLQlwcmludGYgKCIlczogaW52YWxpZCBwYXJhbWV0ZXIgJXNcbiIsIF9fRlVOQ1RJT05fXywgYXJndlsyXSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X2lkZW50aWZpZXIgKHZvaWQpCi17Ci0JcHJpbnRmICgiIyMgRktUOiAiKTsKLX0KLQotaW50IGRvX3B3bSAoY2hhciAqIGNvbnN0ICphcmd2KQotewotCWludCBjb3VudGVyOwotCXN0cnVjdCBzM2MyNHgwX2dwaW8gKiBjb25zdCBncGlvID0gczNjMjR4MF9nZXRfYmFzZV9ncGlvKCk7Ci0Jc3RydWN0IHMzYzI0eDBfdGltZXJzICogY29uc3QgdGltZXJzID0gczNjMjR4MF9nZXRfYmFzZV90aW1lcnMoKTsKLQotCWlmIChzdHJjbXAgKGFyZ3ZbMl0sICJvbiIpID09IDApIHsKLQkJLyogY29uZmlndXJlIHBpbiBHUEQ4IGFzIFRPVVQzICovCi0JCWdwaW8tPnBkY29uICY9IH4oMHgzIDw8IDgqMik7Ci0JCWdwaW8tPnBkY29uIHw9ICgweDIgPDwgOCoyKTsKLQotCQkvKiBzZXQgcHJlc2NhbGVyIGZvciB0aW1lciAyLCAzIGFuZCA0ICovCi0JCXRpbWVycy0+dGNmZzAgJj0gfjB4RkYwMDsKLQkJdGltZXJzLT50Y2ZnMCB8PSAweDBGMDA7Ci0KLQkJLyogc2V0IGRpdmlkZXIgZm9yIHRpbWVyIDMgKi8KLQkJdGltZXJzLT50Y2ZnMSAmPSB+KDB4ZiA8PCAxMik7Ci0JCXRpbWVycy0+dGNmZzEgfD0gKDB4MyA8PCAxMik7Ci0KLQkJLyogc2V0IGZyZXF1ZW5jeSAqLwotCQljb3VudGVyID0gKFBDTEsgLyBQV01fRlJFUSkgPj4gOTsKLQkJdGltZXJzLT5jaFszXS50Y250YiA9IGNvdW50ZXI7Ci0JCXRpbWVycy0+Y2hbM10udGNtcGIgPSBjb3VudGVyIC8gMjsKLQotCQkvKiBzdGFydCB0aW1lciAqLwotCQl0aW1lcnMtPnRjb24gPSAodGltZXJzLT50Y29uIHwgVVBEQVRFMyB8IFJFTE9BRDMpICYgfklOVkVSVDM7Ci0JCXRpbWVycy0+dGNvbiA9ICh0aW1lcnMtPnRjb24gfCBTVEFSVDMpICYgflVQREFURTM7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoc3RyY21wIChhcmd2WzJdLCAib2ZmIikgPT0gMCkgewotCi0JCS8qIHN0b3AgdGltZXIgKi8KLQkJdGltZXJzLT50Y29uICY9IH4oU1RBUlQyIHwgUkVMT0FEMik7Ci0KLQkJLyogY29uZmlndXJlIHBpbiBHUEQ4IGFzIG91dHB1dCBhbmQgc2V0IHRvIDAgKi8KLQkJZ3Bpby0+cGRjb24gJj0gfigweDMgPDwgOCoyKTsKLQkJZ3Bpby0+cGRjb24gfD0gKDB4MSA8PCA4KjIpOwotCQlncGlvLT5wZGRhdCAmPSB+KDEgPDwgOCk7Ci0JCXJldHVybiAwOwotCX0KLQlwcmludGYgKCIlczogaW52YWxpZCBwYXJhbWV0ZXIgJXNcbiIsIF9fRlVOQ1RJT05fXywgYXJndlsyXSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLQotaW50IGRvX3RoZXJtbyAoY2hhciAqIGNvbnN0ICphcmd2KQotewotCWludCAgICAgY2hhbm5lbCwgcmVzOwotCi0JdHNjMjAwMF9yZWdfaW5pdCAoKTsKLQotCWlmIChzdHJjbXAgKGFyZ3ZbMl0sICJhbGwiKSA9PSAwKSB7Ci0JCWludCBpOwotCQlmb3IgKGk9MDsgaSA8PSAxNTsgaSsrKSB7Ci0JCQlyZXMgPSB0c2MyMDAwX3JlYWRfY2hhbm5lbChpKTsKLQkJCXByaW50X2lkZW50aWZpZXIgKCk7Ci0JCQlwcmludGYgKCJjJWQ6ICVkXG4iLCBpLCByZXMpOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQljaGFubmVsID0gc2ltcGxlX3N0cnRvdWwgKGFyZ3ZbMl0sIE5VTEwsIDEwKTsKLQlyZXMgPSB0c2MyMDAwX3JlYWRfY2hhbm5lbChjaGFubmVsKTsKLQlwcmludF9pZGVudGlmaWVyICgpOwotCXByaW50ZiAoIiVkXG4iLCByZXMpOwotCXJldHVybiAwOyAgICAgICAgICAgICAgICAgLyogcmV0dXJuIE9LICovCi19Ci0KLQotaW50IGRvX3RvdWNoIChjaGFyICogY29uc3QgKmFyZ3YpCi17Ci0JaW50ICAgICB4LCB5OwotCi0JaWYgKHN0cmNtcCAoYXJndlsyXSwgInRsIikgPT0gMCkgewotI2lmZGVmIENPTkZJR19UT1VDSF9XQUlUX1BSRVNTRUQKLQkJdG91Y2hfd2FpdF9wcmVzc2VkKCk7Ci0jZWxzZQotCQl7Ci0JCQlpbnQgaTsKLQkJCWZvciAoaSA9IDA7IGkgPCAoVE9VQ0hfVElNRU9VVCAqIDEwMDApOyBpKyspIHsKLQkJCQlpZiAodG91Y2hfY2hlY2tfcHJlc3NlZCAoKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJdWRlbGF5ICgxMDAwKTsgIC8qIHBhdXNlIDEgbXMgKi8KLQkJCX0KLQkJfQotCQlpZiAoIXRvdWNoX2NoZWNrX3ByZXNzZWQoKSkgewotCQkJcHJpbnRfaWRlbnRpZmllciAoKTsKLQkJCXByaW50ZiAoImVycm9yOiB0b3VjaCBub3QgcHJlc3NlZFxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR19UT1VDSF9XQUlUX1BSRVNTRUQgKi8KLQkJdG91Y2hfcmVhZF94X3kgKCZ4LCAmeSk7Ci0KLQkJcHJpbnRfaWRlbnRpZmllciAoKTsKLQkJcHJpbnRmICgieD0lZCB5PSVkXG4iLCB4LCB5KTsKLQkJcmV0dXJuIHRvdWNoX3dyaXRlX2NsaWJyYXRpb25fdmFsdWVzIChDQUxJQl9UTCwgeCwgeSk7Ci0JfQotCWVsc2UgaWYgKHN0cmNtcCAoYXJndlsyXSwgImRyIikgPT0gMCkgewotI2lmZGVmIENPTkZJR19UT1VDSF9XQUlUX1BSRVNTRUQKLQkJdG91Y2hfd2FpdF9wcmVzc2VkKCk7Ci0jZWxzZQotCQl7Ci0JCQlpbnQgaTsKLQkJCWZvciAoaSA9IDA7IGkgPCAoVE9VQ0hfVElNRU9VVCAqIDEwMDApOyBpKyspIHsKLQkJCQlpZiAodG91Y2hfY2hlY2tfcHJlc3NlZCAoKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJdWRlbGF5ICgxMDAwKTsgIC8qIHBhdXNlIDEgbXMgKi8KLQkJCX0KLQkJfQotCQlpZiAoIXRvdWNoX2NoZWNrX3ByZXNzZWQoKSkgewotCQkJcHJpbnRfaWRlbnRpZmllciAoKTsKLQkJCXByaW50ZiAoImVycm9yOiB0b3VjaCBub3QgcHJlc3NlZFxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotI2VuZGlmIC8qIENPTkZJR19UT1VDSF9XQUlUX1BSRVNTRUQgKi8KLQkJdG91Y2hfcmVhZF94X3kgKCZ4LCAmeSk7Ci0KLQkJcHJpbnRfaWRlbnRpZmllciAoKTsKLQkJcHJpbnRmICgieD0lZCB5PSVkXG4iLCB4LCB5KTsKLQotCQlyZXR1cm4gdG91Y2hfd3JpdGVfY2xpYnJhdGlvbl92YWx1ZXMgKENBTElCX0RSLCB4LCB5KTsKLQl9Ci0JcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAvKiBub3QgInRsIiwgbm9yICJkciIsIHNvIHJldHVybiBlcnJvciAqLwotfQotCi0KLSNpZmRlZiBDT05GSUdfVE9VQ0hfV0FJVF9QUkVTU0VECi1zdGF0aWMgdm9pZCB0b3VjaF93YWl0X3ByZXNzZWQgKHZvaWQpCi17Ci0Jd2hpbGUgKCEodHNjMjAwMF9yZWFkKFRTQzIwMDBfUkVHX0FEQykgJiBUQ19QU00pKTsKLX0KLQotI2Vsc2UKLXN0YXRpYyBpbnQgdG91Y2hfY2hlY2tfcHJlc3NlZCAodm9pZCkKLXsKLQlyZXR1cm4gKHRzYzIwMDBfcmVhZChUU0MyMDAwX1JFR19BREMpICYgVENfUFNNKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfVE9VQ0hfV0FJVF9QUkVTU0VEICovCi0KLXN0YXRpYyBpbnQgdG91Y2hfd3JpdGVfY2xpYnJhdGlvbl92YWx1ZXMgKGludCBjYWxpYl9wb2ludCwgaW50IHgsIGludCB5KQotewotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9JMkMpCi0JaW50IHhfdmVyaWZ5ID0gMDsKLQlpbnQgeV92ZXJpZnkgPSAwOwotCi0JdHNjMjAwMF9yZWdfaW5pdCAoKTsKLQotCWlmIChjYWxpYl9wb2ludCA9PSBDQUxJQl9UTCkgewotCQlpZiAoaTJjX3dyaXRlX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBUT1VDSF9YMCwgMSwKLQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSZ4LCAyKSkgewotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWYgKGkyY193cml0ZV9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWTAsIDEsCi0JCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmeSwgMikpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJLyogdmVyaWZ5IHdyaXR0ZW4gdmFsdWVzICovCi0JCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWDAsIDEsCi0JCQkgICAgICAodW5zaWduZWQgY2hhciAqKSZ4X3ZlcmlmeSwgMikpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWTAsIDEsCi0JCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmeV92ZXJpZnksIDIpKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAoKHkgIT0geV92ZXJpZnkpIHx8ICh4ICE9IHhfdmVyaWZ5KSkgewotCQkJcHJpbnRfaWRlbnRpZmllciAoKTsKLQkJCXByaW50ZiAoImVycm9yOiB2ZXJpZnkgZXJyb3JcbiIpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcmV0dXJuIDA7ICAgICAgIC8qIG5vIGVycm9yICovCi0JfQotCWVsc2UgaWYgKGNhbGliX3BvaW50ID09IENBTElCX0RSKSB7Ci0JCSAgaWYgKGkyY193cml0ZV9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWDEsIDEsCi0JCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmeCwgMikpIHsKLQkJCXJldHVybiAxOwotCQkgIH0KLQkJaWYgKGkyY193cml0ZV9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWTEsIDEsCi0JCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmeSwgMikpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJLyogdmVyaWZ5IHdyaXR0ZW4gdmFsdWVzICovCi0JCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWDEsIDEsCi0JCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopJnhfdmVyaWZ5LCAyKSkgewotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJaWYgKGkyY19yZWFkX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBUT1VDSF9ZMSwgMSwKLQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSZ5X3ZlcmlmeSwgMikpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmICgoeSAhPSB5X3ZlcmlmeSkgfHwgKHggIT0geF92ZXJpZnkpKSB7Ci0JCQlwcmludF9pZGVudGlmaWVyICgpOwotCQkJcHJpbnRmICgiZXJyb3I6IHZlcmlmeSBlcnJvclxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci0jZWxzZQotCXByaW50ZiAoIk5vIEkyQyBzdXBwb3J0IGVuYWJsZWQgKENPTkZJR19DTURfSTJDKSwgY291bGQgbm90IHdyaXRlICIKLQkJInRvIEVFUFJPTVxuIik7Ci0JcmV0dXJuICgxKTsKLSNlbmRpZgotfQotCi0KLXN0YXRpYyB2b2lkIHRvdWNoX3JlYWRfeF95IChpbnQgKnB4LCBpbnQgKnB5KQotewotCXRzYzIwMDBfd3JpdGUoVFNDMjAwMF9SRUdfQURDLCBERUZBVUxUX0FEQyB8IFRDX0FEMCB8IFRDX0FEMSk7Ci0JYWRjX3dhaXRfY29udmVyc2lvbl9kb25lKCk7Ci0JKnB4ID0gdHNjMjAwMF9yZWFkKFRTQzIwMDBfUkVHX1gpOwotCi0JdHNjMjAwMF93cml0ZShUU0MyMDAwX1JFR19BREMsIERFRkFVTFRfQURDIHwgVENfQUQyKTsKLQlhZGNfd2FpdF9jb252ZXJzaW9uX2RvbmUoKTsKLQkqcHkgPSB0c2MyMDAwX3JlYWQoVFNDMjAwMF9SRUdfWSk7Ci19Ci0KLQotaW50IGRvX3JzNDg1IChjaGFyICogY29uc3QgKmFyZ3YpCi17Ci0JaW50IHRpbWVvdXQ7Ci0JY2hhciBkYXRhW1JTNDg1X01BWF9SRUNFSVZFX0JVRl9MRU5dOwotCi0JaWYgKHN0cmNtcCAoYXJndlsyXSwgInNlbmQiKSA9PSAwKSB7Ci0JCXJldHVybiAocnM0ODVfc2VuZF9saW5lIChhcmd2WzNdKSk7Ci0JfQotCWVsc2UgaWYgKHN0cmNtcCAoYXJndlsyXSwgInJlY2VpdmUiKSA9PSAwKSB7Ci0JCXRpbWVvdXQgPSBzaW1wbGVfc3RydG91bChhcmd2WzNdLCBOVUxMLCAxMCk7Ci0JCWlmIChyczQ4NV9yZWNlaXZlX2NoYXJzIChkYXRhLCB0aW1lb3V0KSAhPSAwKSB7Ci0JCQlwcmludF9pZGVudGlmaWVyICgpOwotCQkJcHJpbnRmICgiIyMgbm90aGluZyByZWNlaXZlZFxuIik7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCWVsc2UgewotCQkJcHJpbnRfaWRlbnRpZmllciAoKTsKLQkJCXByaW50ZiAoIiVzXG4iLCBkYXRhKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQl9Ci0JcHJpbnRmICgiJXM6IHVua25vd24gY29tbWFuZCAlc1xuIiwgX19GVU5DVElPTl9fLCBhcmd2WzJdKTsKLQlyZXR1cm4gKDEpOyAgICAgICAgICAgICAvKiB1bmtub3duIGNvbW1hbmQsIHJldHVybiBlcnJvciAqLwotfQotCi0KLXN0YXRpYyBpbnQgcnM0ODVfc2VuZF9saW5lIChjb25zdCBjaGFyICpkYXRhKQotewotCXJzNDg1X2luaXQgKCk7Ci0JdHJhYl9yczQ4NV9lbmFibGVfdHggKCk7Ci0JcnM0ODVfcHV0cyAoZGF0YSk7Ci0JcnM0ODVfcHV0YyAoJ1xuJyk7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0KLXN0YXRpYyBpbnQgcnM0ODVfcmVjZWl2ZV9jaGFycyAoY2hhciAqZGF0YSwgaW50IHRpbWVvdXQpCi17Ci0JaW50IGk7Ci0JaW50IHJlY2VpdmVfY291bnQgPSAwOwotCi0JcnM0ODVfaW5pdCAoKTsKLQl0cmFiX3JzNDg1X2VuYWJsZV9yeCAoKTsKLQotCS8qIHRlc3QgZXZlcnkgMSBtcyBmb3IgcmVjZWl2ZWQgY2hhcmFjdGVycyB0byBhdm9pZCBhIHJlY2VpdmUgRklGTwotCSAqIG92ZXJydW4gKEAgMzguNDAwIEJhdWQpICovCi0JZm9yIChpID0gMDsgaSA8ICh0aW1lb3V0ICogMTAwMCk7IGkrKykgewotCQl3aGlsZSAocnM0ODVfdHN0YyAoKSkgewotCQkJaWYgKHJlY2VpdmVfY291bnQgPj0gUlM0ODVfTUFYX1JFQ0VJVkVfQlVGX0xFTi0xKQotCQkJCWJyZWFrOwotCQkJKmRhdGErKyA9IHJzNDg1X2dldGMgKCk7Ci0JCQlyZWNlaXZlX2NvdW50Kys7Ci0JCX0KLQkJdWRlbGF5ICgxMDAwKTsgIC8qIHBhdXNlIDEgbXMgKi8KLQl9Ci0JKmRhdGEgPSAnXDAnOyAgICAgICAgICAgLyogdGVybWluYXRlIHN0cmluZyAqLwotCi0JaWYgKHJlY2VpdmVfY291bnQgPT0gMCkKLQkJcmV0dXJuICgxKTsKLQllbHNlCi0JCXJldHVybiAoMCk7Ci19Ci0KLQotaW50IGRvX3NlcmlhbF9udW1iZXIgKGNoYXIgKiBjb25zdCAqYXJndikKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19DTURfSTJDKQotCXVuc2lnbmVkIGludCBzZXJpYWxfbnVtYmVyOwotCi0JaWYgKHN0cmNtcCAoYXJndlsyXSwgInJlYWQiKSA9PSAwKSB7Ci0JCWlmIChpMmNfcmVhZCAoSTJDX0VFUFJPTV9ERVZfQUREUiwgU0VSSUFMX05VTUJFUiwgMSwKLQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopJnNlcmlhbF9udW1iZXIsIDQpKSB7Ci0JCQlwcmludGYgKCJjb3VsZCBub3QgcmVhZCBmcm9tIGVlcHJvbVxuIik7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCXByaW50X2lkZW50aWZpZXIgKCk7Ci0JCXByaW50ZiAoIiUwOGRcbiIsIHNlcmlhbF9udW1iZXIpOwotCQlyZXR1cm4gKDApOwotCX0KLQllbHNlIGlmIChzdHJjbXAgKGFyZ3ZbMl0sICJ3cml0ZSIpID09IDApIHsKLQkJc2VyaWFsX251bWJlciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbM10sIE5VTEwsIDEwKTsKLQkJaWYgKGkyY193cml0ZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgU0VSSUFMX05VTUJFUiwgMSwKLQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopJnNlcmlhbF9udW1iZXIsIDQpKSB7Ci0JCQlwcmludGYgKCJjb3VsZCBub3Qgd3JpdGUgdG8gZWVwcm9tXG4iKTsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJcmV0dXJuICgwKTsKLQl9Ci0JcHJpbnRmICgiJXM6IHVua25vd24gY29tbWFuZCAlc1xuIiwgX19GVU5DVElPTl9fLCBhcmd2WzJdKTsKLQlyZXR1cm4gKDEpOyAgICAgICAgICAgICAvKiB1bmtub3duIGNvbW1hbmQsIHJldHVybiBlcnJvciAqLwotI2Vsc2UKLQlwcmludGYgKCJObyBJMkMgc3VwcG9ydCBlbmFibGVkIChDT05GSUdfQ01EX0kyQyksIGNvdWxkIG5vdCB3cml0ZSAiCi0JCSJ0byBFRVBST01cbiIpOwotCXJldHVybiAoMSk7Ci0jZW5kaWYKLX0KLQotCi1pbnQgZG9fY3JjMTYgKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0kyQykKLQlpbnQgY3JjOwotCXVuc2lnbmVkIGNoYXIgYnVmW0VFUFJPTV9NQVhfQ1JDX0JVRl07Ci0KLQlpZiAoaTJjX3JlYWQgKEkyQ19FRVBST01fREVWX0FERFIsIDAsIDEsIGJ1ZiwgNjApKSB7Ci0JCXByaW50ZiAoImNvdWxkIG5vdCByZWFkIGZyb20gZWVwcm9tXG4iKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0JY3JjID0gMDsgICAgICAgICAgICAgICAgLyogc3RhcnQgdmFsdWUgb2YgY3JjIGNhbGN1bGF0aW9uICovCi0JY3JjID0gdXBkY3JjIChjcmMsIGJ1ZiwgNjApOwotCi0JcHJpbnRfaWRlbnRpZmllciAoKTsKLQlwcmludGYgKCJjcmMxNj0lIzA0eFxuIiwgY3JjKTsKLQotCWlmIChpMmNfd3JpdGUgKEkyQ19FRVBST01fREVWX0FERFIsIENSQzE2LCAxLCAodW5zaWduZWQgY2hhciAqKSZjcmMsCi0JCSAgICAgICBzaXplb2YgKGNyYykpKSB7Ci0JCXByaW50ZiAoImNvdWxkIG5vdCByZWFkIGZyb20gZWVwcm9tXG4iKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0JcmV0dXJuICgwKTsKLSNlbHNlCi0JcHJpbnRmICgiTm8gSTJDIHN1cHBvcnQgZW5hYmxlZCAoQ09ORklHX0NNRF9JMkMpLCBjb3VsZCBub3Qgd3JpdGUgIgotCQkidG8gRUVQUk9NXG4iKTsKLQlyZXR1cm4gKDEpOwotI2VuZGlmCi19Ci0KLQotLyoKLSAqIENhbGN1bGF0ZSwgaW50ZWxsaWdlbnRseSwgdGhlIENSQyBvZiBhIGRhdGFzZXQgaW5jcmVtZW50YWxseSBnaXZlbiBhCi0gKiBidWZmZXIgZnVsbCBhdCBhIHRpbWUuCi0gKiBJbml0aWFsaXplIGNyYyB0byAwIGZvciBYTU9ERU0sIC0xIGZvciBDQ0lUVC4KLSAqCi0gKiBVc2FnZToKLSAqICAgbmV3Y3JjID0gdXBkY3JjKCBvbGRjcmMsIGJ1ZmFkciwgYnVmbGVuICkKLSAqICAgICAgICB1bnNpZ25lZCBpbnQgb2xkY3JjLCBidWZsZW47Ci0gKiAgICAgICAgY2hhciAqYnVmYWRyOwotICoKLSAqIENvbXBpbGUgd2l0aCAtRFRFU1QgdG8gZ2VuZXJhdGUgcHJvZ3JhbSB0aGF0IHByaW50cyBDUkMgb2Ygc3RkaW4gdG8gc3Rkb3V0LgotICogQ29tcGlsZSB3aXRoIC1ETUFLRVRBQiB0byBwcmludCB2YWx1ZXMgZm9yIGNyY3RhYiB0byBzdGRvdXQKLSAqLwotCi0gICAgLyogdGhlIENSQyBwb2x5bm9taWFsLiBUaGlzIGlzIHVzZWQgYnkgWE1PREVNIChhbG1vc3QgQ0NJVFQpLgotICAgICAqIElmIHlvdSBjaGFuZ2UgUCwgeW91IG11c3QgY2hhbmdlIGNyY3RhYltdJ3MgaW5pdGlhbCB2YWx1ZSB0byB3aGF0IGlzCi0gICAgICogcHJpbnRlZCBieSBpbml0Y3JjdGFiKCkKLSAgICAgKi8KLSNkZWZpbmUgICBQICAgIDB4MTAyMQotCi0gICAgLyogbnVtYmVyIG9mIGJpdHMgaW4gQ1JDOiBkb24ndCBjaGFuZ2UgaXQuICovCi0jZGVmaW5lIFcgMTYKLQotICAgIC8qIHRoaXMgdGhlIG51bWJlciBvZiBiaXRzIHBlciBjaGFyOiBkb24ndCBjaGFuZ2UgaXQuICovCi0jZGVmaW5lIEIgOAotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY3JjdGFiWzE8PEJdID0geyAvKiBhcyBjYWxjdWxhdGVkIGJ5IGluaXRjcmN0YWIoKSAqLwotICAgIDB4MDAwMCwgIDB4MTAyMSwgIDB4MjA0MiwgIDB4MzA2MywgIDB4NDA4NCwgIDB4NTBhNSwgIDB4NjBjNiwgIDB4NzBlNywKLSAgICAweDgxMDgsICAweDkxMjksICAweGExNGEsICAweGIxNmIsICAweGMxOGMsICAweGQxYWQsICAweGUxY2UsICAweGYxZWYsCi0gICAgMHgxMjMxLCAgMHgwMjEwLCAgMHgzMjczLCAgMHgyMjUyLCAgMHg1MmI1LCAgMHg0Mjk0LCAgMHg3MmY3LCAgMHg2MmQ2LAotICAgIDB4OTMzOSwgIDB4ODMxOCwgIDB4YjM3YiwgIDB4YTM1YSwgIDB4ZDNiZCwgIDB4YzM5YywgIDB4ZjNmZiwgIDB4ZTNkZSwKLSAgICAweDI0NjIsICAweDM0NDMsICAweDA0MjAsICAweDE0MDEsICAweDY0ZTYsICAweDc0YzcsICAweDQ0YTQsICAweDU0ODUsCi0gICAgMHhhNTZhLCAgMHhiNTRiLCAgMHg4NTI4LCAgMHg5NTA5LCAgMHhlNWVlLCAgMHhmNWNmLCAgMHhjNWFjLCAgMHhkNThkLAotICAgIDB4MzY1MywgIDB4MjY3MiwgIDB4MTYxMSwgIDB4MDYzMCwgIDB4NzZkNywgIDB4NjZmNiwgIDB4NTY5NSwgIDB4NDZiNCwKLSAgICAweGI3NWIsICAweGE3N2EsICAweDk3MTksICAweDg3MzgsICAweGY3ZGYsICAweGU3ZmUsICAweGQ3OWQsICAweGM3YmMsCi0gICAgMHg0OGM0LCAgMHg1OGU1LCAgMHg2ODg2LCAgMHg3OGE3LCAgMHgwODQwLCAgMHgxODYxLCAgMHgyODAyLCAgMHgzODIzLAotICAgIDB4YzljYywgIDB4ZDllZCwgIDB4ZTk4ZSwgIDB4ZjlhZiwgIDB4ODk0OCwgIDB4OTk2OSwgIDB4YTkwYSwgIDB4YjkyYiwKLSAgICAweDVhZjUsICAweDRhZDQsICAweDdhYjcsICAweDZhOTYsICAweDFhNzEsICAweDBhNTAsICAweDNhMzMsICAweDJhMTIsCi0gICAgMHhkYmZkLCAgMHhjYmRjLCAgMHhmYmJmLCAgMHhlYjllLCAgMHg5Yjc5LCAgMHg4YjU4LCAgMHhiYjNiLCAgMHhhYjFhLAotICAgIDB4NmNhNiwgIDB4N2M4NywgIDB4NGNlNCwgIDB4NWNjNSwgIDB4MmMyMiwgIDB4M2MwMywgIDB4MGM2MCwgIDB4MWM0MSwKLSAgICAweGVkYWUsICAweGZkOGYsICAweGNkZWMsICAweGRkY2QsICAweGFkMmEsICAweGJkMGIsICAweDhkNjgsICAweDlkNDksCi0gICAgMHg3ZTk3LCAgMHg2ZWI2LCAgMHg1ZWQ1LCAgMHg0ZWY0LCAgMHgzZTEzLCAgMHgyZTMyLCAgMHgxZTUxLCAgMHgwZTcwLAotICAgIDB4ZmY5ZiwgIDB4ZWZiZSwgIDB4ZGZkZCwgIDB4Y2ZmYywgIDB4YmYxYiwgIDB4YWYzYSwgIDB4OWY1OSwgIDB4OGY3OCwKLSAgICAweDkxODgsICAweDgxYTksICAweGIxY2EsICAweGExZWIsICAweGQxMGMsICAweGMxMmQsICAweGYxNGUsICAweGUxNmYsCi0gICAgMHgxMDgwLCAgMHgwMGExLCAgMHgzMGMyLCAgMHgyMGUzLCAgMHg1MDA0LCAgMHg0MDI1LCAgMHg3MDQ2LCAgMHg2MDY3LAotICAgIDB4ODNiOSwgIDB4OTM5OCwgIDB4YTNmYiwgIDB4YjNkYSwgIDB4YzMzZCwgIDB4ZDMxYywgIDB4ZTM3ZiwgIDB4ZjM1ZSwKLSAgICAweDAyYjEsICAweDEyOTAsICAweDIyZjMsICAweDMyZDIsICAweDQyMzUsICAweDUyMTQsICAweDYyNzcsICAweDcyNTYsCi0gICAgMHhiNWVhLCAgMHhhNWNiLCAgMHg5NWE4LCAgMHg4NTg5LCAgMHhmNTZlLCAgMHhlNTRmLCAgMHhkNTJjLCAgMHhjNTBkLAotICAgIDB4MzRlMiwgIDB4MjRjMywgIDB4MTRhMCwgIDB4MDQ4MSwgIDB4NzQ2NiwgIDB4NjQ0NywgIDB4NTQyNCwgIDB4NDQwNSwKLSAgICAweGE3ZGIsICAweGI3ZmEsICAweDg3OTksICAweDk3YjgsICAweGU3NWYsICAweGY3N2UsICAweGM3MWQsICAweGQ3M2MsCi0gICAgMHgyNmQzLCAgMHgzNmYyLCAgMHgwNjkxLCAgMHgxNmIwLCAgMHg2NjU3LCAgMHg3Njc2LCAgMHg0NjE1LCAgMHg1NjM0LAotICAgIDB4ZDk0YywgIDB4Yzk2ZCwgIDB4ZjkwZSwgIDB4ZTkyZiwgIDB4OTljOCwgIDB4ODllOSwgIDB4Yjk4YSwgIDB4YTlhYiwKLSAgICAweDU4NDQsICAweDQ4NjUsICAweDc4MDYsICAweDY4MjcsICAweDE4YzAsICAweDA4ZTEsICAweDM4ODIsICAweDI4YTMsCi0gICAgMHhjYjdkLCAgMHhkYjVjLCAgMHhlYjNmLCAgMHhmYjFlLCAgMHg4YmY5LCAgMHg5YmQ4LCAgMHhhYmJiLCAgMHhiYjlhLAotICAgIDB4NGE3NSwgIDB4NWE1NCwgIDB4NmEzNywgIDB4N2ExNiwgIDB4MGFmMSwgIDB4MWFkMCwgIDB4MmFiMywgIDB4M2E5MiwKLSAgICAweGZkMmUsICAweGVkMGYsICAweGRkNmMsICAweGNkNGQsICAweGJkYWEsICAweGFkOGIsICAweDlkZTgsICAweDhkYzksCi0gICAgMHg3YzI2LCAgMHg2YzA3LCAgMHg1YzY0LCAgMHg0YzQ1LCAgMHgzY2EyLCAgMHgyYzgzLCAgMHgxY2UwLCAgMHgwY2MxLAotICAgIDB4ZWYxZiwgIDB4ZmYzZSwgIDB4Y2Y1ZCwgIDB4ZGY3YywgIDB4YWY5YiwgIDB4YmZiYSwgIDB4OGZkOSwgIDB4OWZmOCwKLSAgICAweDZlMTcsICAweDdlMzYsICAweDRlNTUsICAweDVlNzQsICAweDJlOTMsICAweDNlYjIsICAweDBlZDEsICAweDFlZjAKLSAgICB9OwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgdXBkY3JjKHVuc2lnbmVkIHNob3J0IGljcmMsIHVuc2lnbmVkIGNoYXIgKmljcCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGljbnQgKQotewotCXJlZ2lzdGVyIHVuc2lnbmVkIHNob3J0IGNyYyA9IGljcmM7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqY3AgPSBpY3A7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgaW50IGNudCA9IGljbnQ7Ci0KLQl3aGlsZSAoY250LS0pCi0JCWNyYyA9IChjcmM8PEIpIF4gY3JjdGFiWyhjcmM+PihXLUIpKSBeICpjcCsrXTsKLQotCXJldHVybiAoY3JjKTsKLX0KLQotCi1pbnQgZG9fZ2FpbiAoY2hhciAqIGNvbnN0ICphcmd2KQotewotCWludCByYW5nZTsKLQotCXJhbmdlID0gc2ltcGxlX3N0cnRvdWwgKGFyZ3ZbMl0sIE5VTEwsIDEwKTsKLQlpZiAoKHJhbmdlIDwgMSkgfHwgKHJhbmdlID4gMykpCi0JewotCQlwcmludGYgKCIlczogaW52YWxpZCBwYXJhbWV0ZXIgJXNcbiIsIF9fRlVOQ1RJT05fXywgYXJndlsyXSk7Ci0JCXJldHVybiAxOwotCX0KLQotCXRzYzIwMDBfc2V0X3JhbmdlIChyYW5nZSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotCi1pbnQgZG9fZWVwcm9tIChjaGFyICogY29uc3QgKmFyZ3YpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0kyQykKLQlpZiAoc3RyY21wIChhcmd2WzJdLCAicmVhZCIpID09IDApIHsKLQkJcmV0dXJuICh0cmFiX2VlcHJvbV9yZWFkIChhcmd2KSk7Ci0JfQotCi0JZWxzZSBpZiAoc3RyY21wIChhcmd2WzJdLCAid3JpdGUiKSA9PSAwKSB7Ci0JCXJldHVybiAodHJhYl9lZXByb21fd3JpdGUgKGFyZ3YpKTsKLQl9Ci0KLQlwcmludGYgKCIlczogaW52YWxpZCBwYXJhbWV0ZXIgJXNcbiIsIF9fRlVOQ1RJT05fXywgYXJndlsyXSk7Ci0JcmV0dXJuICgxKTsKLSNlbHNlCi0JcHJpbnRmICgiTm8gSTJDIHN1cHBvcnQgZW5hYmxlZCAoQ09ORklHX0NNRF9JMkMpLCBjb3VsZCBub3Qgd3JpdGUgIgotCQkidG8gRUVQUk9NXG4iKTsKLQlyZXR1cm4gKDEpOwotI2VuZGlmCi19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfSTJDKQotc3RhdGljIGludCB0cmFiX2VlcHJvbV9yZWFkIChjaGFyICogY29uc3QgKmFyZ3YpCi17Ci0JaW50IGk7Ci0JaW50IGxlbjsKLQl1bnNpZ25lZCBpbnQgYWRkcjsKLQlsb25nIGludCB2YWx1ZSA9IDA7Ci0JdWNoYXIgKmJ1ZmZlcjsKLQotCWJ1ZmZlciA9ICh1Y2hhciAqKSAmdmFsdWU7Ci0JYWRkciA9IHNpbXBsZV9zdHJ0b3VsIChhcmd2WzNdLCBOVUxMLCAxMCk7Ci0JYWRkciAmPSAweGZmZjsKLQlsZW4gPSBzaW1wbGVfc3RydG91bCAoYXJndls0XSwgTlVMTCwgMTApOwotCWlmICgobGVuIDwgMSkgfHwgKGxlbiA+IDQpKSB7Ci0JCXByaW50ZiAoIiVzOiBpbnZhbGlkIHBhcmFtZXRlciAlc1xuIiwgX19GVU5DVElPTl9fLAotCQkJYXJndls0XSk7Ci0JCXJldHVybiAoMSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlpZiAoaTJjX3JlYWQgKEkyQ19FRVBST01fREVWX0FERFIsIGFkZHIraSwgMSwgYnVmZmVyK2ksIDEpKSB7Ci0JCQlwcmludGYgKCIlczogY291bGQgbm90IHJlYWQgZnJvbSBpMmMgZGV2aWNlICUjeCIKLQkJCQkiLCBhZGRyICVkXG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJSTJDX0VFUFJPTV9ERVZfQUREUiwgYWRkcik7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCXByaW50X2lkZW50aWZpZXIgKCk7Ci0JaWYgKHN0cmNtcCAoYXJndls1XSwgIi0iKSA9PSAwKSB7Ci0JCWlmIChsZW4gPT0gMSkKLQkJCXByaW50ZiAoIiVkXG4iLCAoc2lnbmVkIGNoYXIpIHZhbHVlKTsKLQkJZWxzZSBpZiAobGVuID09IDIpCi0JCQlwcmludGYgKCIlZFxuIiwgKHNpZ25lZCBzaG9ydCBpbnQpIHZhbHVlKTsKLQkJZWxzZQotCQkJcHJpbnRmICgiJWxkXG4iLCB2YWx1ZSk7Ci0JfQotCWVsc2UgewotCQlpZiAobGVuID09IDEpCi0JCQlwcmludGYgKCIlZFxuIiwgKHVuc2lnbmVkIGNoYXIpIHZhbHVlKTsKLQkJZWxzZSBpZiAobGVuID09IDIpCi0JCQlwcmludGYgKCIlZFxuIiwgKHVuc2lnbmVkIHNob3J0IGludCkgdmFsdWUpOwotCQllbHNlCi0JCQlwcmludGYgKCIlbGRcbiIsICh1bnNpZ25lZCBsb25nIGludCkgdmFsdWUpOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW50IHRyYWJfZWVwcm9tX3dyaXRlIChjaGFyICogY29uc3QgKmFyZ3YpCi17Ci0JaW50IGk7Ci0JaW50IGxlbjsKLQl1bnNpZ25lZCBpbnQgYWRkcjsKLQlsb25nIGludCB2YWx1ZSA9IDA7Ci0JdWNoYXIgKmJ1ZmZlcjsKLQotCWJ1ZmZlciA9ICh1Y2hhciAqKSAmdmFsdWU7Ci0JYWRkciA9IHNpbXBsZV9zdHJ0b3VsIChhcmd2WzNdLCBOVUxMLCAxMCk7Ci0JYWRkciAmPSAweGZmZjsKLQlsZW4gPSBzaW1wbGVfc3RydG91bCAoYXJndls0XSwgTlVMTCwgMTApOwotCWlmICgobGVuIDwgMSkgfHwgKGxlbiA+IDQpKSB7Ci0JCXByaW50ZiAoIiVzOiBpbnZhbGlkIHBhcmFtZXRlciAlc1xuIiwgX19GVU5DVElPTl9fLAotCQkJYXJndls0XSk7Ci0JCXJldHVybiAoMSk7Ci0JfQotCXZhbHVlID0gc2ltcGxlX3N0cnRvbCAoYXJndls1XSwgTlVMTCwgMTApOwotCWRlYnVnICgidmFsdWU9JWxkXG4iLCB2YWx1ZSk7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChpMmNfd3JpdGUgKEkyQ19FRVBST01fREVWX0FERFIsIGFkZHIraSwgMSwgYnVmZmVyK2ksIDEpKSB7Ci0JCQlwcmludGYgKCIlczogY291bGQgbm90IHdyaXRlIHRvIGkyYyBkZXZpY2UgJWQiCi0JCQkJIiwgYWRkciAlZFxuIiwgX19GVU5DVElPTl9fLAotCQkJCUkyQ19FRVBST01fREVWX0FERFIsIGFkZHIpOwotCQkJcmV0dXJuICgxKTsKLQkJfQotI2lmIDAKLQkJcHJpbnRmICgiY2hpcD0lI3gsIGFkZHIraT0lI3grJWQ9JXAsIGFsZW49JWQsICpidWZmZXIraT0iCi0JCQkiJSN4KyVkPSVwPSUjeCBcbiIsSTJDX0VFUFJPTV9ERVZfQUREUl9ERVZfQUREUiAsIGFkZHIsCi0JCQlpLCBhZGRyK2ksIDEsIGJ1ZmZlciwgaSwgYnVmZmVyK2ksICooYnVmZmVyK2kpKTsKLSNlbmRpZgotCQl1ZGVsYXkgKDMwMDAwKTsgLyogd2FpdCBmb3IgRUVQUk9NIHJlYWR5ICovCi0JfQotCXJldHVybiAoMCk7Ci19Ci0KLWludCBpMmNfd3JpdGVfbXVsdGlwbGUgKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sCi0JCQl1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQotewotCWludCBpOwotCi0JaWYgKGFsZW4gIT0gMSkgewotCQlwcmludGYgKCIlczogYWRkciBsZW4gb3RoZXIgdGhhbiAxIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJaWYgKGkyY193cml0ZSAoY2hpcCwgYWRkcitpLCBhbGVuLCBidWZmZXIraSwgMSkpIHsKLQkJCXByaW50ZiAoIiVzOiBjb3VsZCBub3Qgd3JpdGUgdG8gaTJjIGRldmljZSAlZCIKLQkJCQkgIiwgYWRkciAlZFxuIiwgX19GVU5DVElPTl9fLCBjaGlwLCBhZGRyKTsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLSNpZiAwCi0JCXByaW50ZiAoImNoaXA9JSN4LCBhZGRyK2k9JSN4KyVkPSVwLCBhbGVuPSVkLCAqYnVmZmVyK2k9IgotCQkJIiUjeCslZD0lcD1cIiUuMXNcIlxuIiwgY2hpcCwgYWRkciwgaSwgYWRkcitpLAotCQkJYWxlbiwgYnVmZmVyLCBpLCBidWZmZXIraSwgYnVmZmVyK2kpOwotI2VuZGlmCi0KLQkJdWRlbGF5ICgzMDAwMCk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLWludCBpMmNfcmVhZF9tdWx0aXBsZSAoIHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sCi0JCQl1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQotewotCWludCBpOwotCi0JaWYgKGFsZW4gIT0gMSkgewotCQlwcmludGYgKCIlczogYWRkciBsZW4gb3RoZXIgdGhhbiAxIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJaWYgKGkyY19yZWFkIChjaGlwLCBhZGRyK2ksIGFsZW4sIGJ1ZmZlcitpLCAxKSkgewotCQkJcHJpbnRmICgiJXM6IGNvdWxkIG5vdCByZWFkIGZyb20gaTJjIGRldmljZSAlI3giCi0JCQkJICIsIGFkZHIgJWRcbiIsIF9fRlVOQ1RJT05fXywgY2hpcCwgYWRkcik7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvdHNjMjAwMC5jIGIvYm9hcmQvdHJhYi90c2MyMDAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNmVkOWMuLjAwMDAwMDAKLS0tIGEvYm9hcmQvdHJhYi90c2MyMDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyoKLSAqIEZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlIFRTQzIwMDAgY29udHJvbGxlciBvbiBUUkFCIGJvYXJkICh1c2VkIGZvciBzY2FubmluZwotICogdGhlcm1vIHNlbnNvcnMpCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIE1hcnRpbiBLcmF1c2UsIFRRLVN5c3RlbXMgR21iSCwgbWFydGluLmtyYXVzZUB0cXMuZGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgV29sZmdhbmcgRGVuaywgd2RAZGVueC5kZQotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNHgwX2NwdS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGRpdjY0Lmg+Ci0jaW5jbHVkZSAidHNjMjAwMC5oIgotCi0jaW5jbHVkZSAiUHQxMDAwX3RlbXBfZGF0YS5oIgotCi0vKiBoZWxwZXIgZnVuY3Rpb24gKi8KLSNkZWZpbmUgYWJzKHZhbHVlKSAoKCh2YWx1ZSkgPCAwKSA/ICgodmFsdWUpKi0xKSA6ICh2YWx1ZSkpCi0KLS8qCi0gKiBNYXhpbWFsIGFsbG93ZWQgZGV2aWF0aW9uIGJldHdlZW4gdHdvIGltbWVkaWF0ZSBtZWFzc3VybWVudHMgb2YgYW4gYW5hbG9nCi0gKiB0aGVybW8gY2hhbm5lbC4gMSBESUdJVCA9IDAuMDI3NiCwQy4gVGhpcyBpcyB1c2VkIHRvIGZpbHRlciBzcG9yYWRpYwotICogImp1bXBzIiBpbiBtZWFzdXJtZW50LgotICovCi0jZGVmaW5lIE1BWF9ERVZJQVRJT04JMTgJLyogdW5pdDogRElHSVRzIG9mIGFkYzsgMTggRElHSVQgPSAwLjUgsEMgKi8KLQotdm9pZCB0c2MyMDAwX3NwaV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQlzdHJ1Y3QgczNjMjR4MF9zcGkgKiBjb25zdCBzcGkgPSBzM2MyNHgwX2dldF9iYXNlX3NwaSgpOwotCWludCBpOwotCi0JLyogQ29uZmlndXJlIEkvTyBwb3J0cy4gKi8KLQlncGlvLT5wZGNvbiA9IChncGlvLT5wZGNvbiAmIDB4RjNGRkZGKSB8IDB4MDQwMDAwOwotCWdwaW8tPnBnY29uID0gKGdwaW8tPnBnY29uICYgMHgwRjNGRkYpIHwgMHgwMDgwMDA7Ci0JZ3Bpby0+cGdjb24gPSAoZ3Bpby0+cGdjb24gJiAweDBDRkZGRikgfCAweDAyMDAwMDsKLQlncGlvLT5wZ2NvbiA9IChncGlvLT5wZ2NvbiAmIDB4MDNGRkZGKSB8IDB4MDgwMDAwOwotCi0JQ0xSX0NTX1RPVUNIKCk7Ci0KLQlzcGktPmNoWzBdLnNwcHJlID0gMHgxRjsgLyogQmF1ZC1yYXRlIGNhLiA1MTRrSHogKi8KLQlzcGktPmNoWzBdLnNwcGluID0gMHgwMTsgLyogU1BJLU1PU0kgaG9sZHMgTGV2ZWwgYWZ0ZXIgbGFzdCBiaXQgKi8KLQlzcGktPmNoWzBdLnNwY29uID0gMHgxQTsgLyogUG9sbGluZywgUHJlc2NhbGVyLCBNYXN0ZXIsIENQT0w9MCwKLQkJCQkgICAgQ1BIQT0xICovCi0KLQkvKiBEdW1teSBieXRlIGVuc3VyZXMgY2xvY2sgdG8gYmUgbG93LiAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXNwaS0+Y2hbMF0uc3B0ZGF0ID0gMHhGRjsKLQl9Ci0Jc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwotfQotCi0KLXZvaWQgc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSh2b2lkKQotewotCXN0cnVjdCBzM2MyNHgwX3NwaSAqIGNvbnN0IHNwaSA9IHMzYzI0eDBfZ2V0X2Jhc2Vfc3BpKCk7Ci0KLQl3aGlsZSAoIShzcGktPmNoWzBdLnNwc3RhICYgMHgwMSkpIC8qIHdhaXQgdW50aWwgdHJhbnNmZXIgaXMgZG9uZSAqLwotCQk7Ci19Ci0KLQotdm9pZCB0c2MyMDAwX3dyaXRlKHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgZGF0YSkKLXsKLQlzdHJ1Y3QgczNjMjR4MF9zcGkgKiBjb25zdCBzcGkgPSBzM2MyNHgwX2dldF9iYXNlX3NwaSgpOwotCXVuc2lnbmVkIGludCBjb21tYW5kOwotCi0JU0VUX0NTX1RPVUNIKCk7Ci0JY29tbWFuZCA9IHJlZzsKLQlzcGktPmNoWzBdLnNwdGRhdCA9IChjb21tYW5kICYgMHhGRjAwKSA+PiA4OwotCXNwaV93YWl0X3RyYW5zbWl0X2RvbmUoKTsKLQlzcGktPmNoWzBdLnNwdGRhdCA9IChjb21tYW5kICYgMHgwMEZGKTsKLQlzcGlfd2FpdF90cmFuc21pdF9kb25lKCk7Ci0Jc3BpLT5jaFswXS5zcHRkYXQgPSAoZGF0YSAmIDB4RkYwMCkgPj4gODsKLQlzcGlfd2FpdF90cmFuc21pdF9kb25lKCk7Ci0Jc3BpLT5jaFswXS5zcHRkYXQgPSAoZGF0YSAmIDB4MDBGRik7Ci0Jc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwotCi0JQ0xSX0NTX1RPVUNIKCk7Ci19Ci0KLQotdW5zaWduZWQgc2hvcnQgdHNjMjAwMF9yZWFkICh1bnNpZ25lZCBzaG9ydCByZWcpCi17Ci0JdW5zaWduZWQgc2hvcnQgY29tbWFuZCwgZGF0YTsKLQlzdHJ1Y3QgczNjMjR4MF9zcGkgKiBjb25zdCBzcGkgPSBzM2MyNHgwX2dldF9iYXNlX3NwaSgpOwotCi0JU0VUX0NTX1RPVUNIKCk7Ci0JY29tbWFuZCA9IDB4ODAwMCB8IHJlZzsKLQotCXNwaS0+Y2hbMF0uc3B0ZGF0ID0gKGNvbW1hbmQgJiAweEZGMDApID4+IDg7Ci0Jc3BpX3dhaXRfdHJhbnNtaXRfZG9uZSgpOwotCXNwaS0+Y2hbMF0uc3B0ZGF0ID0gKGNvbW1hbmQgJiAweDAwRkYpOwotCXNwaV93YWl0X3RyYW5zbWl0X2RvbmUoKTsKLQotCXNwaS0+Y2hbMF0uc3B0ZGF0ID0gMHhGRjsKLQlzcGlfd2FpdF90cmFuc21pdF9kb25lKCk7Ci0JZGF0YSA9IHNwaS0+Y2hbMF0uc3ByZGF0OwotCXNwaS0+Y2hbMF0uc3B0ZGF0ID0gMHhGRjsKLQlzcGlfd2FpdF90cmFuc21pdF9kb25lKCk7Ci0KLQlDTFJfQ1NfVE9VQ0goKTsKLQlyZXR1cm4gKHNwaS0+Y2hbMF0uc3ByZGF0ICYgMHgwRkYpIHwgKGRhdGEgPDwgOCk7Ci19Ci0KLQotdm9pZCB0c2MyMDAwX3NldF9tdXggKHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCXN0cnVjdCBzM2MyNHgwX2dwaW8gKiBjb25zdCBncGlvID0gczNjMjR4MF9nZXRfYmFzZV9ncGlvKCk7Ci0KLQlDTFJfTVVYMV9FTkFCTEU7IENMUl9NVVgyX0VOQUJMRTsKLQlDTFJfTVVYM19FTkFCTEU7IENMUl9NVVg0X0VOQUJMRTsKLQlzd2l0Y2ggKGNoYW5uZWwpIHsKLQljYXNlIDA6Ci0JCUNMUl9NVVgwOyBDTFJfTVVYMTsKLQkJU0VUX01VWDFfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCVNFVF9NVVgwOyBDTFJfTVVYMTsKLQkJU0VUX01VWDFfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCUNMUl9NVVgwOyBTRVRfTVVYMTsKLQkJU0VUX01VWDFfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCVNFVF9NVVgwOyBTRVRfTVVYMTsKLQkJU0VUX01VWDFfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCUNMUl9NVVgwOyBDTFJfTVVYMTsKLQkJU0VUX01VWDJfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCVNFVF9NVVgwOyBDTFJfTVVYMTsKLQkJU0VUX01VWDJfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDY6Ci0JCUNMUl9NVVgwOyBTRVRfTVVYMTsKLQkJU0VUX01VWDJfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDc6Ci0JCVNFVF9NVVgwOyBTRVRfTVVYMTsKLQkJU0VUX01VWDJfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCUNMUl9NVVgwOyBDTFJfTVVYMTsKLQkJU0VUX01VWDNfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDk6Ci0JCVNFVF9NVVgwOyBDTFJfTVVYMTsKLQkJU0VUX01VWDNfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDEwOgotCQlDTFJfTVVYMDsgU0VUX01VWDE7Ci0JCVNFVF9NVVgzX0VOQUJMRTsKLQkJYnJlYWs7Ci0JY2FzZSAxMToKLQkJU0VUX01VWDA7IFNFVF9NVVgxOwotCQlTRVRfTVVYM19FTkFCTEU7Ci0JCWJyZWFrOwotCWNhc2UgMTI6Ci0JCUNMUl9NVVgwOyBDTFJfTVVYMTsKLQkJU0VUX01VWDRfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIDEzOgotCQlTRVRfTVVYMDsgQ0xSX01VWDE7Ci0JCVNFVF9NVVg0X0VOQUJMRTsKLQkJYnJlYWs7Ci0JY2FzZSAxNDoKLQkJQ0xSX01VWDA7IFNFVF9NVVgxOwotCQlTRVRfTVVYNF9FTkFCTEU7Ci0JCWJyZWFrOwotCWNhc2UgMTU6Ci0JCVNFVF9NVVgwOyBTRVRfTVVYMTsKLQkJU0VUX01VWDRfRU5BQkxFOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlDTFJfTVVYMDsgQ0xSX01VWDE7Ci0JfQotfQotCi0KLXZvaWQgdHNjMjAwMF9zZXRfcmFuZ2UgKHVuc2lnbmVkIGludCByYW5nZSkKLXsKLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCi0Jc3dpdGNoIChyYW5nZSkgewotCWNhc2UgMToKLQkJQ0xSX1NFTF9URU1QX1ZfMDsgU0VUX1NFTF9URU1QX1ZfMTsKLQkJQ0xSX1NFTF9URU1QX1ZfMjsgQ0xSX1NFTF9URU1QX1ZfMzsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlDTFJfU0VMX1RFTVBfVl8wOyBDTFJfU0VMX1RFTVBfVl8xOwotCQlDTFJfU0VMX1RFTVBfVl8yOyBTRVRfU0VMX1RFTVBfVl8zOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCVNFVF9TRUxfVEVNUF9WXzA7IENMUl9TRUxfVEVNUF9WXzE7Ci0JCVNFVF9TRUxfVEVNUF9WXzI7IENMUl9TRUxfVEVNUF9WXzM7Ci0JCWJyZWFrOwotCX0KLX0KLQotCi11MTYgdHNjMjAwMF9yZWFkX2NoYW5uZWwgKHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCXUxNiByZXM7Ci0KLQl0c2MyMDAwX3NldF9tdXgoY2hhbm5lbCk7Ci0JdWRlbGF5KDIwICogVFNDMjAwMF9ERUxBWV9CQVNFKTsKLQotCXRzYzIwMDBfd3JpdGUoVFNDMjAwMF9SRUdfQURDLCAweDIwMzYpOwotCWFkY193YWl0X2NvbnZlcnNpb25fZG9uZSAoKTsKLQlyZXMgPSB0c2MyMDAwX3JlYWQoVFNDMjAwMF9SRUdfQVVYMSk7Ci0JcmV0dXJuIHJlczsKLX0KLQotCi1zMzIgdHNjMjAwMF9jb250YWN0X3RlbXAgKHZvaWQpCi17Ci0JbG9uZyBhZGNfcHQxMDAwLCBvZmZzZXQ7Ci0JbG9uZyB1X3B0MTAwMDsKLQlsb25nIGNvbnRhY3RfdGVtcDsKLQlsb25nIHRlbXAxLCB0ZW1wMjsKLQotCXRzYzIwMDBfcmVnX2luaXQgKCk7Ci0JdHNjMjAwMF9zZXRfcmFuZ2UgKDMpOwotCi0JLyoKLQkgKiBCZWNhdXNlIG9mIHNwb3JhZGljICJqdW1wcyIgaW4gdGhlIG1lYXN1cmVkIGFkYyB2YWx1ZXMgZXZlcnkKLQkgKiBjaGFubmVsIGlzIHJlYWQgdHdvIHRpbWVzLiBJZiB0aGVyZSBpcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UKLQkgKiBiZXR3ZWVuIHRoZSB0d28gbWVhc3VyZW1lbnRzLCB0aGVuIHByaW50IGFuIGVycm9yIGFuZCBkbyBhIHRoaXJkCi0JICogbWVhc3VyZW1lbnQsIGJlY2F1c2UgaXQgaXMgdmVyeSB1bmxpa2VseSB0aGF0IGEgc3VjY2Vzc2l2ZSB0aGlyZAotCSAqIG1lYXN1cmVtZW50IGdvZXMgYWxzbyB3cm9uZy4KLQkgKi8KLQl0ZW1wMSA9IHRzYzIwMDBfcmVhZF9jaGFubmVsICgxNCk7Ci0JdGVtcDIgPSB0c2MyMDAwX3JlYWRfY2hhbm5lbCAoMTQpOwotCWlmIChhYnModGVtcDIgLSB0ZW1wMSkgPCBNQVhfREVWSUFUSU9OKQotCQlhZGNfcHQxMDAwID0gdGVtcDI7Ci0JZWxzZSB7Ci0JCXByaW50ZiAoIiVzOiByZWFkIGFkYyB2YWx1ZSAoY2hhbm5lbCAxNCkgZXhjZWVkZWQgbWF4IGFsbG93ZWQgIgotCQkJImRldmlhdGlvbjogJWQgKiAwLjAyNzYgsENcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIE1BWF9ERVZJQVRJT04pOwotCQlwcmludGYgKCJhZGMgdmFsdWUgMTogJWxkIERJR0lUc1xuYWRjIHZhbHVlIDI6ICVsZCBESUdJVHNcbiIsCi0JCQl0ZW1wMSwgdGVtcDIpOwotCQlhZGNfcHQxMDAwID0gdHNjMjAwMF9yZWFkX2NoYW5uZWwgKDE0KTsKLQkJcHJpbnRmICgidXNlICh0aGlyZCByZWFkKSBhZGMgdmFsdWU6IGFkY19wdDEwMDAgPSAiCi0JCQkiJWxkIERJR0lUc1xuIiwJYWRjX3B0MTAwMCk7Ci0JfQotCWRlYnVnICgicmVhZCBjaGFubmVsIDE0IChwdDEwMDAgYWRjIHZhbHVlKTogJWxkXG4iLCBhZGNfcHQxMDAwKTsKLQotCXRlbXAxID0gdHNjMjAwMF9yZWFkX2NoYW5uZWwgKDE1KTsKLQl0ZW1wMiA9IHRzYzIwMDBfcmVhZF9jaGFubmVsICgxNSk7Ci0JaWYgKGFicyh0ZW1wMiAtIHRlbXAxKSA8IE1BWF9ERVZJQVRJT04pCi0JCW9mZnNldCA9IHRlbXAyOwotCWVsc2UgewotCQlwcmludGYgKCIlczogcmVhZCBhZGMgdmFsdWUgKGNoYW5uZWwgMTUpIGV4Y2VlZGVkIG1heCBhbGxvd2VkICIKLQkJCSJkZXZpYXRpb246ICVkICogMC4wMjc2ILBDXG4iLAotCQkJX19GVU5DVElPTl9fLCBNQVhfREVWSUFUSU9OKTsKLQkJcHJpbnRmICgiYWRjIHZhbHVlIDE6ICVsZCBESUdJVHNcbmFkYyB2YWx1ZSAyOiAlbGQgRElHSVRzXG4iLAotCQkJdGVtcDEsIHRlbXAyKTsKLQkJb2Zmc2V0ID0gdHNjMjAwMF9yZWFkX2NoYW5uZWwgKDE1KTsKLQkJcHJpbnRmICgidXNlICh0aGlyZCByZWFkKSBhZGMgdmFsdWU6IG9mZnNldCA9ICVsZCBESUdJVHNcbiIsCi0JCQlvZmZzZXQpOwotCX0KLQlkZWJ1ZyAoInJlYWQgY2hhbm5lbCAxNSAob2Zmc2V0KTogJWxkXG4iLCBvZmZzZXQpOwotCi0JLyoKLQkgKiBGb3JtdWxhIGZvciBjYWxjdWxhdGluZyB2b2x0YWdlIGRyb3Agb24gUFQxMDAwIHJlc2lzdG9yOiB1X3B0MTAwMCA9Ci0JICogeF9yYW5nZTMgKiAoYWRjX3JhdyAtIG9mZnNldCkgLyAxMC4gRm9ybXVsYSB0byBjYWxjdWxhdGUgeF9yYW5nZTM6Ci0JICogeF9yYW5nZTMgPSAoMjUwMCAqICgxMDAwMDAwICsgZXJyX3ZyZWYgKyBlcnJfYW1wMykpIC8gKDQwOTUqNikuIFRoZQotCSAqIGVycm9yIGNvcnJlY3Rpb24gVmFsdWVzIGVycl92cmVmIGFuZCBlcnJfYW1wMyBhcmUgYXNzdW1lZCBhcyAwIGluCi0JICogdS1ib290LCBiZWNhdXNlIHRoaXMgY291bGQgY2F1c2Ugb25seSBhIHZlcnkgc21hbGwgZXJyb3IgKDwgMSUpLgotCSAqLwotCXVfcHQxMDAwID0gKDEwMTc1MCAqIChhZGNfcHQxMDAwIC0gb2Zmc2V0KSkgLyAxMDsKLQlkZWJ1ZyAoInVfcHQxMDAwOiAlbGRcbiIsIHVfcHQxMDAwKTsKLQotCWlmICh0c2MyMDAwX2ludGVycG9sYXRlKHVfcHQxMDAwLCBQdDEwMDBfdGVtcF90YWJsZSwKLQkJCQkmY29udGFjdF90ZW1wKSA9PSAtMSkgewotCQlwcmludGYgKCIlczogZXJyb3IgaW50ZXJwb2xhdGluZyBQVDEwMDAgdmxhdWVcbiIsCi0JCQkgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuICgtMTAwMCk7Ci0JfQotCWRlYnVnICgiY29udGFjdF90ZW1wOiAlbGRcbiIsIGNvbnRhY3RfdGVtcCk7Ci0KLQlyZXR1cm4gY29udGFjdF90ZW1wOwotfQotCi0KLXZvaWQgdHNjMjAwMF9yZWdfaW5pdCAodm9pZCkKLXsKLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCi0JdHNjMjAwMF93cml0ZShUU0MyMDAwX1JFR19BREMsIDB4MjAzNik7Ci0JdHNjMjAwMF93cml0ZShUU0MyMDAwX1JFR19SRUYsIDB4MDAxMSk7Ci0JdHNjMjAwMF93cml0ZShUU0MyMDAwX1JFR19EQUNDVEwsIDB4MDAwMCk7Ci0KLQlDT05fTVVYMDsKLQlDT05fTVVYMTsKLQotCUNPTl9NVVgxX0VOQUJMRTsKLQlDT05fTVVYMl9FTkFCTEU7Ci0JQ09OX01VWDNfRU5BQkxFOwotCUNPTl9NVVg0X0VOQUJMRTsKLQotCUNPTl9TRUxfVEVNUF9WXzA7Ci0JQ09OX1NFTF9URU1QX1ZfMTsKLQlDT05fU0VMX1RFTVBfVl8yOwotCUNPTl9TRUxfVEVNUF9WXzM7Ci0KLQl0c2MyMDAwX3NldF9tdXgoMCk7Ci0JdHNjMjAwMF9zZXRfcmFuZ2UoMCk7Ci19Ci0KLQotaW50IHRzYzIwMDBfaW50ZXJwb2xhdGUobG9uZyB2YWx1ZSwgbG9uZyBkYXRhW11bMl0sIGxvbmcgKnJlc3VsdCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwotCi0JLyogdGhlIGRhdGEgaXMgc29ydGVkIGFuZCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1cHBlcgotCSAqIGxpbWl0IHNvIHdlIGNhbiBlYXNpbHkgY2hlY2sgZm9yIG91dC1vZi1iYW5kIHZhbHVlcwotCSAqLwotCWlmIChkYXRhWzBdWzBdIDwgdmFsdWUgfHwgZGF0YVsxXVswXSA+IHZhbHVlKQotCQlyZXR1cm4gLTE7Ci0KLQlpID0gMTsKLQl3aGlsZSAoZGF0YVtpXVswXSA8IHZhbHVlKQotCQlpKys7Ci0KLQkvKiBUbyBwcmV2ZW50IG92ZXJmbG93IHdlIGhhdmUgdG8gc3RvcmUgdGhlIGludGVybWVkaWF0ZQotCSAgIHJlc3VsdCBpbiAnbG9uZyBsb25nJy4KLQkqLwotCi0JdmFsID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpKGRhdGFbaV1bMV0gLSBkYXRhW2ktMV1bMV0pCi0JCSAgICogKHVuc2lnbmVkIGxvbmcgbG9uZykodmFsdWUgLSBkYXRhW2ktMV1bMF0pKTsKLQlkb19kaXYodmFsLCAoZGF0YVtpXVswXSAtIGRhdGFbaS0xXVswXSkpOwotCSpyZXN1bHQgPSBkYXRhW2ktMV1bMV0gKyB2YWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIGFkY193YWl0X2NvbnZlcnNpb25fZG9uZSh2b2lkKQotewotCXdoaWxlICghKHRzYzIwMDBfcmVhZChUU0MyMDAwX1JFR19BREMpICYgKDEgPDwgMTQpKSk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL3RzYzIwMDAuaCBiL2JvYXJkL3RyYWIvdHNjMjAwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2NlY2I5Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3RyYWIvdHNjMjAwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiBGdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBUU0MyMDAwIGNvbnRyb2xsZXIgb24gVFJBQiBib2FyZCAodXNlZCBmb3Igc2Nhbm5pbmcKLSAqIHRoZXJtbyBzZW5zb3JzKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBNYXJ0aW4gS3JhdXNlLCBUUS1TeXN0ZW1zIEdtYkgsIG1hcnRpbi5rcmF1c2VAdHFzLmRlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFdvbGZnYW5nIERlbmssIHdkQGRlbnguZGUKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaWZuZGVmIF9UU0MyMDAwX0hfCi0jZGVmaW5lIF9UU0MyMDAwX0hfCi0KLS8qIHRlbXBlcmF0dXJlIGNoYW5uZWwgbXVsdGlwbGV4ZXIgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgQ09OX01VWDAJKGdwaW8tPnBjY29uID0gKGdwaW8tPnBjY29uICYgMHgwRkZGRkZDRkYpIHwgMHgwMDAwMDEwMCkKLSNkZWZpbmUgQ0xSX01VWDAJKGdwaW8tPnBjZGF0ICY9IDB4MEZGRUYpCi0jZGVmaW5lIFNFVF9NVVgwCShncGlvLT5wY2RhdCB8PSAweDAwMDEwKQotCi0jZGVmaW5lIENPTl9NVVgxCShncGlvLT5wY2NvbiA9IChncGlvLT5wY2NvbiAmIDB4MEZGRkZGM0ZGKSB8IDB4MDAwMDA0MDApCi0jZGVmaW5lIENMUl9NVVgxCShncGlvLT5wY2RhdCAmPSAweDBGRkRGKQotI2RlZmluZSBTRVRfTVVYMQkoZ3Bpby0+cGNkYXQgfD0gMHgwMDAyMCkKLQotI2RlZmluZSBDT05fTVVYMV9FTkFCTEUJKGdwaW8tPnBjY29uID0gKGdwaW8tPnBjY29uICYgMHgwRkZGRkNGRkYpIHwgMHgwMDAwMTAwMCkKLSNkZWZpbmUgQ0xSX01VWDFfRU5BQkxFCShncGlvLT5wY2RhdCB8PSAweDAwMDQwKQotI2RlZmluZSBTRVRfTVVYMV9FTkFCTEUJKGdwaW8tPnBjZGF0ICY9IDB4MEZGQkYpCi0KLSNkZWZpbmUgQ09OX01VWDJfRU5BQkxFCShncGlvLT5wY2NvbiA9IChncGlvLT5wY2NvbiAmIDB4MEZGRkYzRkZGKSB8IDB4MDAwMDQwMDApCi0jZGVmaW5lIENMUl9NVVgyX0VOQUJMRQkoZ3Bpby0+cGNkYXQgfD0gMHgwMDA4MCkKLSNkZWZpbmUgU0VUX01VWDJfRU5BQkxFCShncGlvLT5wY2RhdCAmPSAweDBGRjdGKQotCi0jZGVmaW5lIENPTl9NVVgzX0VOQUJMRQkoZ3Bpby0+cGNjb24gPSAoZ3Bpby0+cGNjb24gJiAweDBGRkZDRkZGRikgfCAweDAwMDEwMDAwKQotI2RlZmluZSBDTFJfTVVYM19FTkFCTEUJKGdwaW8tPnBjZGF0IHw9IDB4MDAxMDApCi0jZGVmaW5lIFNFVF9NVVgzX0VOQUJMRQkoZ3Bpby0+cGNkYXQgJj0gMHgwRkVGRikKLQotI2RlZmluZSBDT05fTVVYNF9FTkFCTEUJKGdwaW8tPnBjY29uID0gKGdwaW8tPnBjY29uICYgMHgwRkZGM0ZGRkYpIHwgMHgwMDA0MDAwMCkKLSNkZWZpbmUgQ0xSX01VWDRfRU5BQkxFCShncGlvLT5wY2RhdCB8PSAweDAwMjAwKQotI2RlZmluZSBTRVRfTVVYNF9FTkFCTEUJKGdwaW8tPnBjZGF0ICY9IDB4MEZERkYpCi0KLSNkZWZpbmUgQ09OX1NFTF9URU1QX1ZfMAkoZ3Bpby0+cGNjb24gPSAoZ3Bpby0+cGNjb24gJiAweDBGRkNGRkZGRikgfCBcCi0JCQkJCQkJMHgwMDEwMDAwMCkKLSNkZWZpbmUgQ0xSX1NFTF9URU1QX1ZfMAkoZ3Bpby0+cGNkYXQgJj0gMHgwRkJGRikKLSNkZWZpbmUgU0VUX1NFTF9URU1QX1ZfMAkoZ3Bpby0+cGNkYXQgfD0gMHgwMDQwMCkKLQotI2RlZmluZSBDT05fU0VMX1RFTVBfVl8xCShncGlvLT5wY2NvbiA9IChncGlvLT5wY2NvbiAmIDB4MEZGM0ZGRkZGKSB8IFwKLQkJMHgwMDQwMDAwMCkKLSNkZWZpbmUgQ0xSX1NFTF9URU1QX1ZfMQkoZ3Bpby0+cGNkYXQgJj0gMHgwRjdGRikKLSNkZWZpbmUgU0VUX1NFTF9URU1QX1ZfMQkoZ3Bpby0+cGNkYXQgfD0gMHgwMDgwMCkKLQotI2RlZmluZSBDT05fU0VMX1RFTVBfVl8yCShncGlvLT5wY2NvbiA9IChncGlvLT5wY2NvbiAmIDB4MEZDRkZGRkZGKSB8IFwKLQkJMHgwMTAwMDAwMCkKLSNkZWZpbmUgQ0xSX1NFTF9URU1QX1ZfMgkoZ3Bpby0+cGNkYXQgJj0gMHgwRUZGRikKLSNkZWZpbmUgU0VUX1NFTF9URU1QX1ZfMgkoZ3Bpby0+cGNkYXQgfD0gMHgwMTAwMCkKLQotI2RlZmluZSBDT05fU0VMX1RFTVBfVl8zCShncGlvLT5wY2NvbiA9IChncGlvLT5wY2NvbiAmIDB4MEYzRkZGRkZGKSB8IFwKLQkJMHgwNDAwMDAwMCkKLSNkZWZpbmUgQ0xSX1NFTF9URU1QX1ZfMwkoZ3Bpby0+cGNkYXQgJj0gMHgwREZGRikKLSNkZWZpbmUgU0VUX1NFTF9URU1QX1ZfMwkoZ3Bpby0+cGNkYXQgfD0gMHgwMjAwMCkKLQotLyogVFNDMjAwMCByZWdpc3RlciBkZWZpbml0aW9uICovCi0jZGVmaW5lIFRTQzIwMDBfUkVHX1gJCSgoMCA8PCAxMSkgfCAoMCA8PCA1KSkKLSNkZWZpbmUgVFNDMjAwMF9SRUdfWQkJKCgwIDw8IDExKSB8ICgxIDw8IDUpKQotI2RlZmluZSBUU0MyMDAwX1JFR19aMQkJKCgwIDw8IDExKSB8ICgyIDw8IDUpKQotI2RlZmluZSBUU0MyMDAwX1JFR19aMgkJKCgwIDw8IDExKSB8ICgzIDw8IDUpKQotI2RlZmluZSBUU0MyMDAwX1JFR19CQVQxCSgoMCA8PCAxMSkgfCAoNSA8PCA1KSkKLSNkZWZpbmUgVFNDMjAwMF9SRUdfQkFUMgkoKDAgPDwgMTEpIHwgKDYgPDwgNSkpCi0jZGVmaW5lIFRTQzIwMDBfUkVHX0FVWDEJKCgwIDw8IDExKSB8ICg3IDw8IDUpKQotI2RlZmluZSBUU0MyMDAwX1JFR19BVVgyCSgoMCA8PCAxMSkgfCAoOCA8PCA1KSkKLSNkZWZpbmUgVFNDMjAwMF9SRUdfVEVNUDEJKCgwIDw8IDExKSB8ICg5IDw8IDUpKQotI2RlZmluZSBUU0MyMDAwX1JFR19URU1QMgkoKDAgPDwgMTEpIHwgKDB4QSA8PCA1KSkKLSNkZWZpbmUgVFNDMjAwMF9SRUdfREFDCQkoKDAgPDwgMTEpIHwgKDB4QiA8PCA1KSkKLSNkZWZpbmUgVFNDMjAwMF9SRUdfWkVSTwkoKDAgPDwgMTEpIHwgKDB4MTAgPDwgNSkpCi0jZGVmaW5lIFRTQzIwMDBfUkVHX0FEQwkJKCgxIDw8IDExKSB8ICgwIDw8IDUpKQotI2RlZmluZSBUU0MyMDAwX1JFR19EQUNDVEwJKCgxIDw8IDExKSB8ICgyIDw8IDUpKQotI2RlZmluZSBUU0MyMDAwX1JFR19SRUYJCSgoMSA8PCAxMSkgfCAoMyA8PCA1KSkKLSNkZWZpbmUgVFNDMjAwMF9SRUdfUkVTRVQJKCgxIDw8IDExKSB8ICg0IDw8IDUpKQotI2RlZmluZSBUU0MyMDAwX1JFR19DT05GSUcJKCgxIDw8IDExKSB8ICg1IDw8IDUpKQotCi0vKiBiaXQgZGVmaW5pdGlvbiBvZiBUU0MyMDAwIEFEQyByZWdpc3RlciAqLwotI2RlZmluZSBUQ19QU00JCQkoMSA8PCAxNSkKLSNkZWZpbmUgVENfU1RTCQkJKDEgPDwgMTQpCi0jZGVmaW5lIFRDX0FEMwkJCSgxIDw8IDEzKQotI2RlZmluZSBUQ19BRDIJCQkoMSA8PCAxMikKLSNkZWZpbmUgVENfQUQxCQkJKDEgPDwgMTEpCi0jZGVmaW5lIFRDX0FEMAkJCSgxIDw8IDEwKQotI2RlZmluZSBUQ19SUzEJCQkoMSA8PCA5KQotI2RlZmluZSBUQ19SUzAJCQkoMSA8PCA4KQotI2RlZmluZSBUQ19BVjEJCQkoMSA8PCA3KQotI2RlZmluZSBUQ19BVjAJCQkoMSA8PCA2KQotI2RlZmluZSBUQ19DTDEJCQkoMSA8PCA1KQotI2RlZmluZSBUQ19DTDAJCQkoMSA8PCA0KQotI2RlZmluZSBUQ19QVjIJCQkoMSA8PCAzKQotI2RlZmluZSBUQ19QVjEJCQkoMSA8PCAyKQotI2RlZmluZSBUQ19QVjAJCQkoMSA8PCAxKQotCi0vKiBkZWZhdWx0IHZhbHVlIGZvciBUU0MyMDAwIEFEQyByZWdpc3RlciBmb3IgdXNlIHdpdGggdG91Y2ggZnVuY3Rpb25zICovCi0jZGVmaW5lIERFRkFVTFRfQURDCQkoVENfUFYxIHwgVENfQVYwIHwgVENfQVYxIHwgVENfUlMwKQotCi0jZGVmaW5lIFRTQzIwMDBfREVMQVlfQkFTRQk1MDAKLSNkZWZpbmUgVFNDMjAwMF9OT19TRU5TT1IJLTB4MTAwMDAKLQotI2RlZmluZSBFUlJPUl9CQVRURVJZCQkyMjAJLyogbXVzdCBiZSBhZGp1c3RlZCwgaWYgUjY4IGlzIGNoYW5nZWQgb24gVFJBQiAqLwotCi12b2lkIHRzYzIwMDBfd3JpdGUodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKLXVuc2lnbmVkIHNob3J0IHRzYzIwMDBfcmVhZCAodW5zaWduZWQgc2hvcnQpOwotdTE2IHRzYzIwMDBfcmVhZF9jaGFubmVsICh1bnNpZ25lZCBpbnQpOwotdm9pZCB0c2MyMDAwX3NldF9tdXggKHVuc2lnbmVkIGludCk7Ci12b2lkIHRzYzIwMDBfc2V0X3JhbmdlICh1bnNpZ25lZCBpbnQpOwotdm9pZCB0c2MyMDAwX3JlZ19pbml0ICh2b2lkKTsKLXMzMiB0c2MyMDAwX2NvbnRhY3RfdGVtcCAodm9pZCk7Ci12b2lkIHNwaV93YWl0X3RyYW5zbWl0X2RvbmUgKHZvaWQpOwotdm9pZCB0c2MyMDAwX3NwaV9pbml0KHZvaWQpOwotaW50IHRzYzIwMDBfaW50ZXJwb2xhdGUobG9uZyB2YWx1ZSwgbG9uZyBkYXRhW11bMl0sIGxvbmcgKnJlc3VsdCk7Ci12b2lkIGFkY193YWl0X2NvbnZlcnNpb25fZG9uZSh2b2lkKTsKLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgU0VUX0NTX1RPVUNIKHZvaWQpCi17Ci0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQotCWdwaW8tPnBkZGF0ICY9IDB4NUZGOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBDTFJfQ1NfVE9VQ0godm9pZCkKLXsKLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCi0JZ3Bpby0+cGRkYXQgfD0gMHgyMDA7Ci19Ci0KLSNlbmRpZgkvKiBfVFNDMjAwMF9IXyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi91LWJvb3QubGRzIGIvYm9hcmQvdHJhYi91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTk0NDAxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3RyYWIvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2FyeWpAZGVueC5kZT4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCi0vKk9VVFBVVF9GT1JNQVQoImVsZjMyLWFybSIsICJlbGYzMi1hcm0iLCAiZWxmMzItYXJtIikqLwotT1VUUFVUX0FSQ0goYXJtKQotRU5UUlkoX3N0YXJ0KQotU0VDVElPTlMKLXsKLQkuID0gMHgwMDAwMDAwMDsKLQotCS4gPSBBTElHTig0KTsKLQkudGV4dCAgICAgIDoKLQl7Ci0JICBhcmNoL2FybS9jcHUvYXJtOTIwdC9zdGFydC5vCSgudGV4dCkKLQkgIGxpYi96bGliLm8JKC50ZXh0KQotCSAgbGliL2NyYzMyLm8JKC50ZXh0KQotCSAgbGliL3N0cmluZy5vCSgudGV4dCkKLQotCS4gPSBERUZJTkVEKGVudl9vZmZzZXQpID8gZW52X29mZnNldCA6IC47Ci0JICBjb21tb24vZW52X2VtYmVkZGVkLm8JKC5wcGNlbnYpCi0KLQkgICooLnRleHQpCi0JfQotCi0JLiA9IEFMSUdOKDQpOwotCS5yb2RhdGEgOiB7ICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpIH0KLQotCS4gPSBBTElHTig0KTsKLQkuZGF0YSA6IHsgKiguZGF0YSkgfQotCi0JLiA9IEFMSUdOKDQpOwotCS5nb3QgOiB7ICooLmdvdCkgfQotCi0JLiA9IC47Ci0JX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLQkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotCV9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0JLiA9IEFMSUdOKDQpOwotCV9fYnNzX3N0YXJ0ID0gLjsKLQkuYnNzIChOT0xPQUQpIDogeyAqKC5ic3MpIC4gPSBBTElHTig0KTsgfQotCV9fYnNzX2VuZF9fID0gLjsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvdmZkLmMgYi9ib2FyZC90cmFiL3ZmZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTJiMWJhLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3RyYWIvdmZkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzQgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyAtLSB3ZEBkZW54LmRlCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICoqIERFQlVHIFNFVFRJTkdTCQkJCQkJCSovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAjZGVmaW5lIERFQlVHCSovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAqKiBIRUFERVIgRklMRVMJCQkJCQkJKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxjb25maWcuaD4KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDx2ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpb19kZXYuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNHgwX2NwdS5oPgotCi1ERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotI2lmZGVmIENPTkZJR19WRkQKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICoqIENPTkZJRyBTVFVGRiAtLSBzaG91bGQgYmUgbW92ZWQgdG8gYm9hcmQgY29uZmlnIGZpbGUJCSovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIFBBR0VfU0laRQotI2RlZmluZQlQQUdFX1NJWkUJNDA5NgotI2VuZGlmCi0KLSNkZWZpbmUgUk9UCTB4MDkKLSNkZWZpbmUgQkxBVQkweDBDCi0jZGVmaW5lIFZJT0xFVFQJMFgwRAotCi0vKiBNQUdJQyAqLwotI2RlZmluZQlGUkFNRV9CVUZfU0laRQkoKDI1Nio0KjU2KS84KQotI2RlZmluZSBmcmFtZV9idWZfb2ZmcyA0Ci0KLS8qIGRlZmluZXMgZm9yIHN0YXJ0aW5nIFRpbWVyMyBhcyBDUExELUNsayAqLwotI2RlZmluZSBTVEFSVDMJCQkoMSA8PCAxNikKLSNkZWZpbmUgVVBEQVRFMwkJCSgxIDw8IDE3KQotI2RlZmluZSBJTlZFUlQzCQkJKDEgPDwgMTgpCi0jZGVmaW5lIFJFTE9BRDMJCQkoMSA8PCAxOSkKLQotLyogQ1BMRC1SZWdpc3RlciBmb3IgY29udHJvbGxpbmcgdmZkLWJsYW5rLXNpZ25hbCAqLwotI2RlZmluZSBWRkRfRElTQUJMRQkoKih2b2xhdGlsZSB1Y2hhciAqKTB4MDQwMzgwMDA9MHgwMDAwKQotI2RlZmluZSBWRkRfRU5BQkxFCSgqKHZvbGF0aWxlIHVjaGFyICopMHgwNDAzODAwMD0weDAwMDEpCi0KLS8qIFN1cHBvcnRlZCBWRkQgVHlwZXMgKi8KLSNkZWZpbmUJVkZEX1RZUEVfVDExOUMJCTEJLyogTm9yaXRha2UgVDExOUMgVkZEICovCi0jZGVmaW5lCVZGRF9UWVBFX01OMTEyMzYJMgotCi0vKiNkZWZpbmUgTkVXX0NQTERfQ0xLKi8KLQotaW50IHZmZF9ib2FyZF9pZDsKLQotLyogdGFrZW4gZnJvbSBhcm1ib290L2NvbW1vbi92ZmQuYyAqLwotdW5zaWduZWQgbG9uZyBhZHJfdmZkX3RhYmxlWzExMl1bMThdWzJdWzRdWzJdOwotdW5zaWduZWQgY2hhciBiaXRfdmZkX3RhYmxlWzExMl1bMThdWzJdWzRdWzJdOwotCi0vKgotICogaW5pdGlhbGl6ZSB0aGUgdmFsdWVzIGZvciB0aGUgVkZELWdyaWQtY29udHJvbCBpbiB0aGUgZnJhbWVidWZmZXIKLSAqLwotdm9pZCBpbml0X2dyaWRfY3RybCh2b2lkKQotewotCXVsb25nIGFkciwgZ3JpZF9jeWNsZTsKLQl1bnNpZ25lZCBpbnQgYml0LCBkaXNwbGF5OwotCXVuc2lnbmVkIGNoYXIgdGVtcCwgYml0X25yOwotCi0JLyoKLQkgKiBjbGVhciBmcmFtZSBidWZmZXIgKGxvZ2ljYWwgY2xlYXIgPT4gc2V0IHRvICJibGFjayIpCi0JICovCi0JbWVtc2V0ICgodm9pZCAqKShnZC0+ZmJfYmFzZSksIDAsIEZSQU1FX0JVRl9TSVpFKTsKLQotCXN3aXRjaCAoZ2QtPnZmZF90eXBlKSB7Ci0JY2FzZSBWRkRfVFlQRV9UMTE5QzoKLQkgICAgZm9yIChkaXNwbGF5PTA7IGRpc3BsYXk8NDsgZGlzcGxheSsrKSB7Ci0JCWZvcihncmlkX2N5Y2xlPTA7IGdyaWRfY3ljbGU8NTY7IGdyaWRfY3ljbGUrKykgewotCQkJYml0ID0gZ3JpZF9jeWNsZSAqIDI1NiAgKiA0ICsKLQkJCSAgICAgKGdyaWRfY3ljbGUgKyAyMDApICogNCArCi0JCQkgICAgIGZyYW1lX2J1Zl9vZmZzICsgZGlzcGxheTsKLQkJCS8qIHdyYXAgYXJyb3VuZCBpZiBvZmZzZXQgKHNlZSBtYW51YWwgUzNDMjQwMCkgKi8KLQkJCWlmIChiaXQ+PUZSQU1FX0JVRl9TSVpFKjgpCi0JCQkJYml0ID0gYml0IC0gKEZSQU1FX0JVRl9TSVpFICogOCk7Ci0JCQlhZHIgPSBnZC0+ZmJfYmFzZSArIChiaXQvMzIpICogNCArICgzIC0gKGJpdCUzMikgLyA4KTsKLQkJCWJpdF9uciA9IGJpdCAlIDg7Ci0JCQliaXRfbnIgPSAoYml0X25yID4gMykgPyBiaXRfbnItNCA6IGJpdF9ucis0OwotCQkJdGVtcD0oKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoYWRyKSk7Ci0JCQl0ZW1wIHw9ICAoMTw8Yml0X25yKTsKLQkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKShhZHIpKT10ZW1wOwotCi0JCQlpZihncmlkX2N5Y2xlPDU1KQotCQkJCWJpdCA9IGdyaWRfY3ljbGUqMjU2KjQrKGdyaWRfY3ljbGUrMjAxKSo0K2ZyYW1lX2J1Zl9vZmZzK2Rpc3BsYXk7Ci0JCQllbHNlCi0JCQkJYml0ID0gZ3JpZF9jeWNsZSoyNTYqNCsyMDAqNCtmcmFtZV9idWZfb2ZmcytkaXNwbGF5LTQ7CS8qIGdyaWQgbnIuIDAgKi8KLQkJCS8qIHdyYXAgYXJyb3VuZCBpZiBvZmZzZXQgKHNlZSBtYW51YWwgUzNDMjQwMCkgKi8KLQkJCWlmIChiaXQ+PUZSQU1FX0JVRl9TSVpFKjgpCi0JCQkJYml0ID0gYml0LShGUkFNRV9CVUZfU0laRSo4KTsKLQkJCWFkciA9IGdkLT5mYl9iYXNlKyhiaXQvMzIpKjQrKDMtKGJpdCUzMikvOCk7Ci0JCQliaXRfbnIgPSBiaXQlODsKLQkJCWJpdF9uciA9IChiaXRfbnI+Myk/Yml0X25yLTQ6Yml0X25yKzQ7Ci0JCQl0ZW1wPSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKShhZHIpKTsKLQkJCXRlbXAgfD0gICgxPDxiaXRfbnIpOwotCQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopKGFkcikpPXRlbXA7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQljYXNlIFZGRF9UWVBFX01OMTEyMzY6Ci0JICAgIGZvciAoZGlzcGxheT0wOyBkaXNwbGF5PDQ7IGRpc3BsYXkrKykgewotCQlmb3IgKGdyaWRfY3ljbGU9MDsgZ3JpZF9jeWNsZTwzODsgZ3JpZF9jeWNsZSsrKSB7Ci0JCQliaXQgPSBncmlkX2N5Y2xlICogMjU2ICAqIDQgKwotCQkJICAgICAoMjUzIC0gZ3JpZF9jeWNsZSkgKiA0ICsKLQkJCSAgICAgZnJhbWVfYnVmX29mZnMgKyBkaXNwbGF5OwotCQkJLyogd3JhcCBhcnJvdW5kIGlmIG9mZnNldCAoc2VlIG1hbnVhbCBTM0MyNDAwKSAqLwotCQkJaWYgKGJpdD49RlJBTUVfQlVGX1NJWkUqOCkKLQkJCQliaXQgPSBiaXQgLSAoRlJBTUVfQlVGX1NJWkUgKiA4KTsKLQkJCWFkciA9IGdkLT5mYl9iYXNlICsgKGJpdC8zMikgKiA0ICsgKDMgLSAoYml0JTMyKSAvIDgpOwotCQkJYml0X25yID0gYml0ICUgODsKLQkJCWJpdF9uciA9IChiaXRfbnIgPiAzKSA/IGJpdF9uci00IDogYml0X25yKzQ7Ci0JCQl0ZW1wPSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKShhZHIpKTsKLQkJCXRlbXAgfD0gICgxPDxiaXRfbnIpOwotCQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopKGFkcikpPXRlbXA7Ci0KLQkJCWlmKGdyaWRfY3ljbGU8MzcpCi0JCQkJYml0ID0gZ3JpZF9jeWNsZSoyNTYqNCsoMjUyLWdyaWRfY3ljbGUpKjQrZnJhbWVfYnVmX29mZnMrZGlzcGxheTsKLQotCQkJLyogd3JhcCBhcnJvdW5kIGlmIG9mZnNldCAoc2VlIG1hbnVhbCBTM0MyNDAwKSAqLwotCQkJaWYgKGJpdD49RlJBTUVfQlVGX1NJWkUqOCkKLQkJCQliaXQgPSBiaXQtKEZSQU1FX0JVRl9TSVpFKjgpOwotCQkJYWRyID0gZ2QtPmZiX2Jhc2UrKGJpdC8zMikqNCsoMy0oYml0JTMyKS84KTsKLQkJCWJpdF9uciA9IGJpdCU4OwotCQkJYml0X25yID0gKGJpdF9ucj4zKT9iaXRfbnItNDpiaXRfbnIrNDsKLQkJCXRlbXA9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopKGFkcikpOwotCQkJdGVtcCB8PSAgKDE8PGJpdF9ucik7Ci0JCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoYWRyKSk9dGVtcDsKLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIHByaW50ZiAoIldhcm5pbmc6IHVua25vd24gZGlzcGxheSB0eXBlXG4iKTsKLQkgICAgYnJlYWs7Ci0JfQotfQotCi0vKgotICpjcmVhdGUgdHJhbnNsYXRpb24gdGFibGUgZm9yIGdldHRpbmcgZWFzeSB0aGUgcmlnaHQgcG9zaXRpb24gaW4gdGhlCi0gKnBoeXNpY2FsIGZyYW1lYnVmZmVyIGZvciBzb21lIHgveS1jb29yZGluYXRlcyBvZiB0aGUgVkZEcwotICovCi12b2lkIGNyZWF0ZV92ZmRfdGFibGUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZmZF90YWJsZVsxMTJdWzE4XVsyXVs0XVsyXTsKLQl1bnNpZ25lZCBpbnQgeCwgeSwgY29sb3IsIGRpc3BsYXksIGVudHJ5LCBwaXhlbDsKLQl1bnNpZ25lZCBpbnQgeF9hYmNkZWYgPSAwOwotCi0Jc3dpdGNoIChnZC0+dmZkX3R5cGUpIHsKLQljYXNlIFZGRF9UWVBFX1QxMTlDOgotCSAgICBmb3IoeT0wOyB5PD0xNzsgeSsrKSB7CS8qIExpbmUgKi8KLQkJZm9yKHg9MDsgeDw9MTExOyB4KyspIHsJLyogQ29sdW1uICovCi0JCSAgICBmb3IoZGlzcGxheT0wOyBkaXNwbGF5IDw9MzsgZGlzcGxheSsrKSB7Ci0KLQkJCSAgICAvKiBEaXNwbGF5IDAgYmx1ZSBwaXhlbHMgKi8KLQkJCSAgICB2ZmRfdGFibGVbeF1beV1bMF1bZGlzcGxheV1bMF0gPQotCQkJCSh4PT0wKSA/IHkqMTYrZGlzcGxheQotCQkJCSAgICAgICA6ICh4JTQpKjQreSoxNisoKHgtMSkvMikqMTAyNCtkaXNwbGF5OwotCQkJICAgIC8qIERpc3BsYXkgMCByZWQgcGl4ZWxzICovCi0JCQkgICAgdmZkX3RhYmxlW3hdW3ldWzFdW2Rpc3BsYXldWzBdID0KLQkJCQkoeD09MCkgPyB5KjE2KzUxMitkaXNwbGF5Ci0JCQkJICAgICAgIDogKHglNCkqNCt5KjE2KygoeC0xKS8yKSoxMDI0KzUxMitkaXNwbGF5OwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JY2FzZSBWRkRfVFlQRV9NTjExMjM2OgotCSAgICBmb3IoeT0wOyB5PD0xNzsgeSsrKSB7CS8qIExpbmUgKi8KLQkJZm9yKHg9MDsgeDw9MTExOyB4KyspIHsJLyogQ29sdW1uICovCi0JCSAgICBmb3IoZGlzcGxheT0wOyBkaXNwbGF5IDw9MzsgZGlzcGxheSsrKSB7Ci0KLQkJCSAgICB2ZmRfdGFibGVbeF1beV1bMF1bZGlzcGxheV1bMF09MDsKLQkJCSAgICB2ZmRfdGFibGVbeF1beV1bMF1bZGlzcGxheV1bMV09MDsKLQkJCSAgICB2ZmRfdGFibGVbeF1beV1bMV1bZGlzcGxheV1bMF09MDsKLQkJCSAgICB2ZmRfdGFibGVbeF1beV1bMV1bZGlzcGxheV1bMV09MDsKLQotCQkJICAgIHN3aXRjaCAoeCU2KSB7Ci0JCQkgICAgY2FzZSAwOiB4X2FiY2RlZj0wOyBicmVhazsgLyogYSAtPiBhICovCi0JCQkgICAgY2FzZSAxOiB4X2FiY2RlZj0yOyBicmVhazsgLyogYiAtPiBjICovCi0JCQkgICAgY2FzZSAyOiB4X2FiY2RlZj00OyBicmVhazsgLyogYyAtPiBlICovCi0JCQkgICAgY2FzZSAzOiB4X2FiY2RlZj01OyBicmVhazsgLyogZCAtPiBmICovCi0JCQkgICAgY2FzZSA0OiB4X2FiY2RlZj0zOyBicmVhazsgLyogZSAtPiBkICovCi0JCQkgICAgY2FzZSA1OiB4X2FiY2RlZj0xOyBicmVhazsgLyogZiAtPiBiICovCi0JCQkgICAgfQotCi0JCQkgICAgLyogYmx1ZSBwaXhlbHMgKi8KLQkJCSAgICB2ZmRfdGFibGVbeF1beV1bMF1bZGlzcGxheV1bMF0gPQotCQkJCSh4PjEpID8geF9hYmNkZWYqNCsoKHgtMSkvMykqMTAyNCt5KjQ4K2Rpc3BsYXkKLQkJCQkgICAgICA6IHhfYWJjZGVmKjQrICAgICAgICAgICAgIDAreSo0OCtkaXNwbGF5OwotCQkJICAgIC8qIGJsdWUgcGl4ZWxzICovCi0JCQkgICAgaWYgKHg+MSAmJiAoeC0xKSUzKQotCQkJCSAgICB2ZmRfdGFibGVbeF1beV1bMF1bZGlzcGxheV1bMV0gPSB4X2FiY2RlZio0KygoeC0xKS8zKzEpKjEwMjQreSo0OCtkaXNwbGF5OwotCi0JCQkgICAgLyogcmVkIHBpeGVscyAqLwotCQkJICAgIHZmZF90YWJsZVt4XVt5XVsxXVtkaXNwbGF5XVswXSA9Ci0JCQkJKHg+MSkgPyB4X2FiY2RlZio0KzI0KygoeC0xKS8zKSoxMDI0K3kqNDgrZGlzcGxheQotCQkJCSAgICAgIDogeF9hYmNkZWYqNCsyNCsgICAgICAgICAgICAgMCt5KjQ4K2Rpc3BsYXk7Ci0JCQkgICAgLyogcmVkIHBpeGVscyAqLwotCQkJICAgIGlmICh4PjEgJiYgKHgtMSklMykKLQkJCQkgICAgdmZkX3RhYmxlW3hdW3ldWzFdW2Rpc3BsYXldWzFdID0geF9hYmNkZWYqNCsyNCsoKHgtMSkvMysxKSoxMDI0K3kqNDgrZGlzcGxheTsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIC8qIGRvIG5vdGhpbmcgKi8KLQkgICAgcmV0dXJuOwotCX0KLQotCS8qCi0JICogQ3JlYXRlIHRhYmxlIHdpdGggZW50cmllcyBmb3IgcGh5c2ljYWwgYnl0ZSBhZHJlc3NlcyBhbmQKLQkgKiBiaXQtbnVtYmVyIHdpdGhpbiB0aGUgYnl0ZQotCSAqIGZyb20gdGFibGUgd2l0aCBiaXQtbnVtYmVycyB3aXRoaW4gdGhlIHRvdGFsIGZyYW1lYnVmZmVyCi0JICovCi0JZm9yKHk9MDt5PDE4O3krKykgewotCSAgICBmb3IoeD0wO3g8MTEyO3grKykgewotCQlmb3IoY29sb3I9MDtjb2xvcjwyO2NvbG9yKyspIHsKLQkJICAgIGZvcihkaXNwbGF5PTA7ZGlzcGxheTw0O2Rpc3BsYXkrKykgewotCQkJZm9yKGVudHJ5PTA7ZW50cnk8MjtlbnRyeSsrKSB7Ci0JCQkgICAgdW5zaWduZWQgbG9uZyBhZHIgID0gZ2QtPmZiX2Jhc2U7Ci0JCQkgICAgdW5zaWduZWQgaW50IGJpdF9uciA9IDA7Ci0KLQkJCSAgICBwaXhlbCAgPSB2ZmRfdGFibGVbeF1beV1bY29sb3JdW2Rpc3BsYXldW2VudHJ5XSArIGZyYW1lX2J1Zl9vZmZzOwotCQkJICAgIC8qCi0JCQkgICAgICogd3JhcCBhcnJvdW5kIGlmIG9mZnNldAotCQkJICAgICAqIChzZWUgbWFudWFsIFMzQzI0MDApCi0JCQkgICAgICovCi0JCQkgICAgaWYgKHBpeGVsPj1GUkFNRV9CVUZfU0laRSo4KQotCQkJCSAgICBwaXhlbCA9IHBpeGVsLShGUkFNRV9CVUZfU0laRSo4KTsKLQkJCSAgICBhZHIgICAgPSBnZC0+ZmJfYmFzZSsocGl4ZWwvMzIpKjQrKDMtKHBpeGVsJTMyKS84KTsKLQkJCSAgICBiaXRfbnIgPSBwaXhlbCU4OwotCQkJICAgIGJpdF9uciA9IChiaXRfbnI+Myk/Yml0X25yLTQ6Yml0X25yKzQ7Ci0KLQkJCSAgICBhZHJfdmZkX3RhYmxlW3hdW3ldW2NvbG9yXVtkaXNwbGF5XVtlbnRyeV0gPSBhZHI7Ci0JCQkgICAgYml0X3ZmZF90YWJsZVt4XVt5XVtjb2xvcl1bZGlzcGxheV1bZW50cnldID0gYml0X25yOwotCQkJfQotCQkgICAgfQotCQl9Ci0JICAgIH0KLQl9Ci19Ci0KLS8qCi0gKiBTZXQvY2xlYXIgcGl4ZWwgb2YgdGhlIFZGRHMKLSAqLwotdm9pZCBzZXRfdmZkX3BpeGVsKHVuc2lnbmVkIGNoYXIgeCwgdW5zaWduZWQgY2hhciB5LAotCQkgICB1bnNpZ25lZCBjaGFyIGNvbG9yLCB1bnNpZ25lZCBjaGFyIGRpc3BsYXksCi0JCSAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JdWxvbmcgYWRyOwotCXVuc2lnbmVkIGNoYXIgYml0X25yLCB0ZW1wOwotCi0JaWYgKCEgZ2QtPnZmZF90eXBlKSB7Ci0JCS8qIFVua25vd24gdHlwZS4gKi8KLQkJcmV0dXJuOwotCX0KLQotCS8qIFBpeGVsLUVpbnRyYWcgTnIuIDEgKi8KLQlhZHIgPSBhZHJfdmZkX3RhYmxlW3hdW3ldW2NvbG9yXVtkaXNwbGF5XVswXTsKLQkvKiBQaXhlbC1FaW50cmFnIE5yLiAxICovCi0JYml0X25yID0gYml0X3ZmZF90YWJsZVt4XVt5XVtjb2xvcl1bZGlzcGxheV1bMF07Ci0JdGVtcD0oKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoYWRyKSk7Ci0KLQlpZiAodmFsdWUpCi0JCXRlbXAgfD0gICgxPDxiaXRfbnIpOwotCWVsc2UKLQkJdGVtcCAmPSB+KDE8PGJpdF9ucik7Ci0KLQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoYWRyKSk9dGVtcDsKLX0KLQotLyoKLSAqIHRyYW5zZmVyIGltYWdlIGZyb20gQk1QLUZpbGUKLSAqLwotdm9pZCB0cmFuc2Zlcl9waWMoaW50IGRpc3BsYXksIHVuc2lnbmVkIGNoYXIgKmFkciwgaW50IGhlaWdodCwgaW50IHdpZHRoKQotewotCWludCB4LCB5OwotCXVuc2lnbmVkIGNoYXIgdGVtcDsKLQotCWZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQgLT0gMTgpCi0JewotCQlpZiAoaGVpZ2h0ID4gMTgpCi0JCQl5ID0gMTg7Ci0JCWVsc2UKLQkJCXkgPSBoZWlnaHQ7Ci0JCWZvciAoOyB5ID4gMDsgeS0tKQotCQl7Ci0JCQlmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHggKz0gMikKLQkJCXsKLQkJCQl0ZW1wID0gKmFkcisrOwotCQkJCXNldF92ZmRfcGl4ZWwoeCwgeS0xLCAwLCBkaXNwbGF5LCAwKTsKLQkJCQlzZXRfdmZkX3BpeGVsKHgsIHktMSwgMSwgZGlzcGxheSwgMCk7Ci0JCQkJaWYgKCh0ZW1wID4+IDQpID09IEJMQVUpCi0JCQkJCXNldF92ZmRfcGl4ZWwoeCwgeS0xLCAwLCBkaXNwbGF5LCAxKTsKLQkJCQllbHNlIGlmICgodGVtcCA+PiA0KSA9PSBST1QpCi0JCQkJCXNldF92ZmRfcGl4ZWwoeCwgeS0xLCAxLCBkaXNwbGF5LCAxKTsKLQkJCQllbHNlIGlmICgodGVtcCA+PiA0KSA9PSBWSU9MRVRUKQotCQkJCXsKLQkJCQkJc2V0X3ZmZF9waXhlbCh4LCB5LTEsIDAsIGRpc3BsYXksIDEpOwotCQkJCQlzZXRfdmZkX3BpeGVsKHgsIHktMSwgMSwgZGlzcGxheSwgMSk7Ci0JCQkJfQotCQkJCXNldF92ZmRfcGl4ZWwoeCsxLCB5LTEsIDAsIGRpc3BsYXksIDApOwotCQkJCXNldF92ZmRfcGl4ZWwoeCsxLCB5LTEsIDEsIGRpc3BsYXksIDApOwotCQkJCWlmICgodGVtcCAmIDB4MEYpID09IEJMQVUpCi0JCQkJCXNldF92ZmRfcGl4ZWwoeCsxLCB5LTEsIDAsIGRpc3BsYXksIDEpOwotCQkJCWVsc2UgaWYgKCh0ZW1wICYgMHgwRikgPT0gUk9UKQotCQkJCQlzZXRfdmZkX3BpeGVsKHgrMSwgeS0xLCAxLCBkaXNwbGF5LCAxKTsKLQkJCQllbHNlIGlmICgodGVtcCAmIDB4MEYpID09IFZJT0xFVFQpCi0JCQkJewotCQkJCQlzZXRfdmZkX3BpeGVsKHgrMSwgeS0xLCAwLCBkaXNwbGF5LCAxKTsKLQkJCQkJc2V0X3ZmZF9waXhlbCh4KzEsIHktMSwgMSwgZGlzcGxheSwgMSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmIChkaXNwbGF5ID4gMCkKLQkJCWRpc3BsYXktLTsKLQkJZWxzZQotCQkJZGlzcGxheSA9IDM7Ci0JfQotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBWRkQgY2xvY2sgdGhhdCBpcyBuZWVkZWQgZm9yIHRoZSBDUExEIHRoYXQKLSAqIG1hbmFnZXMgdGhlIGtleWJvYXJkLgotICovCi1pbnQgdmZkX2luaXRfY2xvY2tzICh2b2lkKQotewotCWludCBpOwotCi0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQlzdHJ1Y3QgczNjMjR4MF90aW1lcnMgKiBjb25zdCB0aW1lcnMgPSBzM2MyNHgwX2dldF9iYXNlX3RpbWVycygpOwotCXN0cnVjdCBzM2MyNHgwX2xjZCAqIGNvbnN0IGxjZCA9IHMzYzI0eDBfZ2V0X2Jhc2VfbGNkKCk7Ci0KLQkvKiB0cnkgdG8gZGV0ZXJtaW5lIGRpc3BsYXkgdHlwZSBmcm9tIHRoZSB2YWx1ZQotCSAqIGRlZmluZWQgYnkgcHVsbC11cHMKLQkgKi8KLQlncGlvLT5wY3VwID0gKGdwaW8tPnBjdXAgJiAweEZGRjApOyAvKiBhY3RpdmF0ZSAgR1BDMC4uLkdQQzMgcHVsbHVwcyAqLwotCWdwaW8tPnBjY29uID0gKGdwaW8tPnBjY29uICYgMHhGRkZGRkYwMCk7IC8qIGNmZyBHUEMwLi4uR1BDMyBpbnB1dHMgKi8KLQkvKiBhbGxvdyBzaWduYWxzIHRvIHNldHRsZSAqLwotCWZvciAoaT0wOyBpPDEwMDAwOyBpKyspCS8qIHVkZWxheSBpc24ndCB3b3JraW5nIHlldCBhdCB0aGlzIHBvaW50ISAqLwotCQlfX2FzbV9fKCJOT1AiKTsKLQl2ZmRfYm9hcmRfaWQgPSAofmdwaW8tPnBjZGF0KSAmIDB4MDAwRjsJLyogcmVhZCBHUEMwLi4uR1BDMyBwb3J0IHBpbnMgKi8KLQotCVZGRF9ESVNBQkxFOwkJCQkvKiBhY3RpdmF0ZSBibGFuayBmb3IgdGhlIHZmZCAqLwotCi0jZGVmaW5lCU5FV19DUExEX0NMSwotCi0jaWZkZWYgTkVXX0NQTERfQ0xLCi0JaWYgKHZmZF9ib2FyZF9pZCkgewotCQkvKiBJZiBuZXcgYm9hcmQgcmV2aXNpb24sIHRoZW4gdXNlIFBXTSAzIGFzIGNwbGQtY2xvY2sgKi8KLQkJLyogRW5hYmxlIDUwMCBIeiB0aW1lciBmb3IgZmlsbCBsZXZlbCBzZW5zb3IgdG8gb3BlcmF0ZSBwcm9wZXJseSAqLwotCQkvKiBDb25maWd1cmUgVE9VVDMgYXMgZnVuY3Rpb25hbCBwaW4sIGRpc2FibGUgcHVsbC11cCAqLwotCQlncGlvLT5wZGNvbiAmPSB+MHgzMDAwMDsKLQkJZ3Bpby0+cGRjb24gfD0gMHgyMDAwMDsKLQkJZ3Bpby0+cGR1cCB8PSAoMSA8PCA4KTsKLQotCQkvKiBDb25maWd1cmUgdGhlIHByZXNjYWxlciAqLwotCQl0aW1lcnMtPnRjZmcwICY9IH4weGZmMDA7Ci0JCXRpbWVycy0+dGNmZzAgfD0gMHgwZjAwOwotCi0JCS8qIFNlbGVjdCBNVVggaW5wdXQgKGRpdmlkZXIpIGZvciB0aW1lcjMgKDEvMTYpICovCi0JCXRpbWVycy0+dGNmZzEgJj0gfjB4ZjAwMDsKLQkJdGltZXJzLT50Y2ZnMSB8PSAweDMwMDA7Ci0KLQkJLyogRW5hYmxlIGF1dG9yZWxvYWQgYW5kIHNldCB0aGUgY291bnRlciBhbmQgY29tcGFyZQotCQkgKiByZWdpc3RlcnMgdG8gdmFsdWVzIGZvciB0aGUgNTAwIEh6IGNsb2NrCi0JCSAqIChmb3IgYSBnaXZlbiAgcHJlc2NhbGVyICgxNSkgYW5kIGRpdmlkZXIgKDE2KSk6Ci0JCSAqIGNvdW50ZXIgPSAoNjYwMDAwMDAgLyA1MDApID4+IDk7Ci0JCSAqLwotCQl0aW1lcnMtPmNoWzNdLnRjbnRiID0gMHgxMDE7Ci0JCXRpbWVycy0+Y2hbM10udGNtcGIgPSAweDEwMSAvIDI7Ci0KLQkJLyogU3RhcnQgdGltZXIgKi8KLQkJdGltZXJzLT50Y29uID0gKHRpbWVycy0+dGNvbiB8IFVQREFURTMgfCBSRUxPQUQzKSAmIH5JTlZFUlQzOwotCQl0aW1lcnMtPnRjb24gPSAodGltZXJzLT50Y29uIHwgU1RBUlQzKSAmIH5VUERBVEUzOwotCX0KLSNlbmRpZgotCS8qIElmIG9sZCBib2FyZCByZXZpc2lvbiwgdGhlbiB1c2Ugdm0tc2lnbmFsIGFzIGNwbGQtY2xvY2sgKi8KLQlsY2QtPmxjZGNvbjIgPSAweDAwRkZDMDAwOwotCWxjZC0+bGNkY29uMyA9IDB4MDAwN0ZGMDA7Ci0JbGNkLT5sY2Rjb240ID0gMHgwMDAwMDAwMDsKLQlsY2QtPmxjZGNvbjUgPSAweDAwMDAwNDAwOwotCWxjZC0+bGNkY29uMSA9IDB4MDAwMDBCNzU7Ci0JLyogVk0gKEdQRDEpIGlzIHVzZWQgYXMgY2xvY2sgZm9yIHRoZSBDUExEICovCi0JZ3Bpby0+cGRjb24gPSAoZ3Bpby0+cGRjb24gJiAweEZGRkZGRkYzKSB8IDB4MDAwMDAwMDg7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGluaXRpYWxpemUgTENELUNvbnRyb2xsZXIgb2YgdGhlIFMzQzI0MDAgZm9yIHVzaW5nIFZGRHMKLSAqCi0gKiBWRkQgZGV0ZWN0aW9uIGRlcGVuZHMgb24gdGhlIGJvYXJkIHJldmlzaW9uOgotICogc3RhcnRpbmcgZnJvbSBSZXYuIDIwMCBhIHR5cGUgY29kZSBjYW4gYmUgcmVhZCBmcm9tIHRoZSBkYXRhIHBpbnMsCi0gKiBkcml2ZW4gYnkgc29tZSBwdWxsLXVwIHJlc2lzdG9yczsgYWxsIGVhcmxpZXIgc3lzdGVtcyBtdXN0IGJlCi0gKiBtYW51YWxseSBjb25maWd1cmVkLiBUaGUgdHlwZSBpcyBzZXQgaW4gdGhlICJ2ZmRfdHlwZSIgZW52aXJvbm1lbnQKLSAqIHZhcmlhYmxlLgotICovCi1pbnQgZHJ2X3ZmZF9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHMzYzI0eDBfbGNkICogY29uc3QgbGNkID0gczNjMjR4MF9nZXRfYmFzZV9sY2QoKTsKLQlzdHJ1Y3QgczNjMjR4MF9ncGlvICogY29uc3QgZ3BpbyA9IHMzYzI0eDBfZ2V0X2Jhc2VfZ3BpbygpOwotCWNoYXIgKnRtcDsKLQl1bG9uZyBwYWxldHRlOwotCXN0YXRpYyBpbnQgdmZkX2luaXRfZG9uZSA9IDA7Ci0JaW50IHZmZF9pbnZfZGF0YSA9IDA7Ci0KLQlpZiAodmZkX2luaXRfZG9uZSAhPSAwKQotCQlyZXR1cm4gKDApOwotCXZmZF9pbml0X2RvbmUgPSAxOwotCi0JZGVidWcoIkRldGVjdGluZyBSZXZpc29uIG9mIFdBNC1WRkQ6IElEPTB4JVhcbiIsIHZmZF9ib2FyZF9pZCk7Ci0KLQlzd2l0Y2ggKHZmZF9ib2FyZF9pZCkgewotCWNhc2UgMDoJCQkvKiBib2FyZCByZXZpc2lvbiA8IFJldi4yMDAgKi8KLQkJaWYgKCh0bXAgPSBnZXRlbnYgKCJ2ZmRfdHlwZSIpKSA9PSBOVUxMKSB7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RyY21wKHRtcCwgIlQxMTlDIikgPT0gMCkgewotCQkJZ2QtPnZmZF90eXBlID0gVkZEX1RZUEVfVDExOUM7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKHRtcCwgIk1OMTEyMzYiKSA9PSAwKSB7Ci0JCQlnZC0+dmZkX3R5cGUgPSBWRkRfVFlQRV9NTjExMjM2OwotCQl9IGVsc2UgewotCQkJLyogY2Fubm90IHVzZSBwcmludGYgZm9yIGEgd2FybmluZyBoZXJlICovCi0JCQlnZC0+dmZkX3R5cGUgPSAwOwkvKiB1bmtub3duICovCi0JCX0KLQotCQlicmVhazsKLQlkZWZhdWx0OgkJLyogZGVmYXVsdCB0byBNTjExMjM2LCBkYXRhIGludmVydGVkICovCi0JCWdkLT52ZmRfdHlwZSA9IFZGRF9UWVBFX01OMTEyMzY7Ci0JCXZmZF9pbnZfZGF0YSA9IDE7Ci0JCXNldGVudiAoInZmZF90eXBlIiwgIk1OMTEyMzYiKTsKLQl9Ci0JZGVidWcgKCJWRkQgdHlwZTogJXMlc1xuIiwKLQkJKGdkLT52ZmRfdHlwZSA9PSBWRkRfVFlQRV9UMTE5QykgICA/ICJUMTE5QyIgOgotCQkoZ2QtPnZmZF90eXBlID09IFZGRF9UWVBFX01OMTEyMzYpID8gIk1OMTEyMzYiIDoKLQkJInVua25vd24iLAotCQl2ZmRfaW52X2RhdGEgPyAiLCBpbnZlcnRlZCBkYXRhIiA6ICIiKTsKLQotCWdkLT5mYl9iYXNlID0gZ2QtPmZiX2Jhc2U7Ci0JY3JlYXRlX3ZmZF90YWJsZSgpOwotCWluaXRfZ3JpZF9jdHJsKCk7Ci0KLQlmb3IgKHBhbGV0dGU9MDsgcGFsZXR0ZSA8IDE2OyBwYWxldHRlKyspCi0JCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCopKFBBTEVUVEUrKHBhbGV0dGUqNCkpKT1wYWxldHRlOwotCWZvciAocGFsZXR0ZT0xNjsgcGFsZXR0ZSA8IDI1NjsgcGFsZXR0ZSsrKQotCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKShQQUxFVFRFKyhwYWxldHRlKjQpKSk9MHgwMDsKLQotCS8qCi0JICogSGlud2VpczogRGVyIEZyYW1lYnVmZmVyIGlzdCB1bSBnZW5hdSBlaW4gTmliYmxlIHZlcnNjaG9iZW4KLQkgKiBEYXMgZXJzdGUgYW5nZXplaWd0ZSBQaXhlbCB3aXJkIGF1cyBkZW0gendlaXRlbiBOaWJibGUgZ2Vob2x0Ci0JICogZGFzIGxldHp0ZSBhbmdlemVpZ3RlIFBpeGVsIHdpcmQgYXVzIGRlbSBlcnN0ZW4gTmliYmxlIGdlaG9sdAotCSAqICh3cmFwIGFyb3VuZCkKLQkgKiBzZWUgbWFudWFsIFMzQzI0MDAKLQkgKi8KLQkvKiBTdG9wcCBMQ0QtQ29udHJvbGxlciAqLwotCWxjZC0+bGNkY29uMSA9IDB4MDAwMDAwMDA7Ci0JLyogZnJhbWUgYnVmZmVyIHN0YXJ0YWRyICovCi0JbGNkLT5sY2RzYWRkcjEgPSBnZC0+ZmJfYmFzZSA+PiAxOwotCS8qIGZyYW1lIGJ1ZmZlciBlbmRhZHIgKi8KLQlsY2QtPmxjZHNhZGRyMiA9IChnZC0+ZmJfYmFzZSArIEZSQU1FX0JVRl9TSVpFKSA+PiAxOwotCWxjZC0+bGNkc2FkZHIzID0gKCgyNTYvNCkpOwotCWxjZC0+bGNkY29uMiA9IDB4MDAwREMwMDA7Ci0JaWYoZ2QtPnZmZF90eXBlID09IFZGRF9UWVBFX01OMTEyMzYpCi0JCWxjZC0+bGNkY29uMiA9IDM3IDw8IDE0OwkvKiBNTjExMjM2OiAzOCBsaW5lcyAqLwotCWVsc2UKLQkJbGNkLT5sY2Rjb24yID0gNTUgPDwgMTQ7CS8qIFQxMTlDOiAgIDU2IGxpbmVzICovCi0JbGNkLT5sY2Rjb24zID0gMHgwMDUxMDAwQTsKLQlsY2QtPmxjZGNvbjQgPSAweDAwMDAwMDAxOwotCWlmIChnZC0+dmZkX3R5cGUgJiYgdmZkX2ludl9kYXRhKQotCQlsY2QtPmxjZGNvbjUgPSAweDAwMDAwNEMwOwotCWVsc2UKLQkJbGNkLT5sY2Rjb241ID0gMHgwMDAwMDQ0MDsKLQotCS8qIFBvcnQgcGlucyBhcyBMQ0Qgb3V0cHV0ICovCi0JZ3Bpby0+cGNjb24gPSAgIChncGlvLT5wY2NvbiAmIDB4RkZGRkZGMDApIHwgMHgwMDAwMDBBQTsKLQlncGlvLT5wZGNvbiA9ICAgKGdwaW8tPnBkY29uICYgMHhGRkZGRkYwMykgfCAweDAwMDAwMEE4OwotCi0JLyogU3luY2hyb25pemUgVkZEIGVuYWJsZSB3aXRoIExDRCBjb250cm9sbGVyIHRvIGF2b2lkIGZsaWNrZXIJKi8KLQlsY2QtPmxjZGNvbjEgPSAweDAwMDAwQjc1OyAvKiBTdGFydCBMQ0QtQ29udHJvbGxlcgkqLwotCXdoaWxlICgobGNkLT5sY2Rjb241ICYgMHgxODAwMDApICE9IDB4MTAwMDAwKSAvKiBXYWl0IGZvciBWU1lOQyBlbmQgKi8KLQkJOwotCXdoaWxlICgobGNkLT5sY2Rjb241ICYgMHgwNjAwMDApICE9IDB4MDQwMDAwKSAvKiBXYWl0IGZvciBuZXh0IEhTWU5DICovCi0JCTsKLQl3aGlsZSAoKGxjZC0+bGNkY29uNSAmIDB4MDYwMDAwKSA9PSAweDA0MDAwMCkKLQkJOwotCXdoaWxlICgobGNkLT5sY2Rjb241ICYgMHgwNjAwMDApICE9IDB4MDAwMDAwKQotCQk7Ci0JaWYoZ2QtPnZmZF90eXBlKQotCQlWRkRfRU5BQkxFOwotCi0JZGVidWcoIkxDRFNBRERSMTogJWxYXG4iLCBsY2QtPmxjZHNhZGRyMSk7Ci0JZGVidWcoIkxDRFNBRERSMjogJWxYXG4iLCBsY2QtPmxjZHNhZGRyMik7Ci0JZGVidWcoIkxDRFNBRERSMzogJWxYXG4iLCBsY2QtPmxjZHNhZGRyMyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIERpc2FibGUgVkZEOiBzaG91bGQgYmUgcnVuIGJlZm9yZSByZXNldHRpbmcgdGhlIHN5c3RlbToKLSAqIGRpc2FibGUgVk0sIGVuYWJsZSBwdWxsLXVwCi0gKi8KLXZvaWQgZGlzYWJsZV92ZmQgKHZvaWQpCi17Ci0Jc3RydWN0IHMzYzI0eDBfZ3BpbyAqIGNvbnN0IGdwaW8gPSBzM2MyNHgwX2dldF9iYXNlX2dwaW8oKTsKLQotCVZGRF9ESVNBQkxFOwotCWdwaW8tPnBkY29uICY9IH4weEM7Ci0JZ3Bpby0+cGR1cCAgJj0gfjB4MjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICoqIFJPTSBjYXBhYmxlIGluaXRpYWxpemF0aW9uIHBhcnQgLSBuZWVkZWQgdG8gcmVzZXJ2ZSBGQiBtZW1vcnkJKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBUaGlzIGlzIGNhbGxlZCBlYXJseSBpbiB0aGUgc3lzdGVtIGluaXRpYWxpemF0aW9uIHRvIGdyYWIgbWVtb3J5Ci0gKiBmb3IgdGhlIFZGRCBjb250cm9sbGVyLgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGlzIHJ1bm5pbmcgZnJvbSBST00sIHNvIG5vIHdyaXRlIGFjY2VzcyB0byBnbG9iYWwgZGF0YS4KLSAqLwotdWxvbmcgdmZkX3NldG1lbSAodWxvbmcgYWRkcikKLXsKLQl1bG9uZyBzaXplOwotCi0JLyogUm91bmQgdXAgdG8gbmVhcmVzdCBmdWxsIHBhZ2UgKi8KLQlzaXplID0gKEZSQU1FX0JVRl9TSVpFICsgKFBBR0VfU0laRSAtIDEpKSAmIH4oUEFHRV9TSVpFIC0gMSk7Ci0KLQlkZWJ1ZyAoIlJlc2VydmluZyAlbGRrIGZvciBWRkQgRnJhbWVidWZmZXIgYXQ6ICUwOGx4XG4iLCBzaXplPj4xMCwgYWRkcik7Ci0KLQlyZXR1cm4gKHNpemUpOwotfQotCi0vKgotICogQ2FsY3VsYXRlIGZiIHNpemUgZm9yIFZJREVPTEZCX0FUQUcuIFNpemUgcmV0dXJuZWQgY29udGFpbnMgZmIsCi0gKiBkZXNjcmlwdG9ycyBhbmQgcGFsZXR0ZSBhcmVhcy4KLSAqLwotdWxvbmcgY2FsY19mYnNpemUgKHZvaWQpCi17Ci0JcmV0dXJuIEZSQU1FX0JVRl9TSVpFOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1ZGRCAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL01ha2VmaWxlIGIvY29tbW9uL01ha2VmaWxlCmluZGV4IGY4MWNmZjkuLjIyNGI3Y2MgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9NYWtlZmlsZQorKysgYi9jb21tb24vTWFrZWZpbGUKQEAgLTE2MCw3ICsxNjAsNiBAQAogZW5kaWYKIENPQkpTLSQoQ09ORklHX0NNRF9YSU1HKSArPSBjbWRfeGltZy5vCiBDT0JKUy0kKENPTkZJR19ZQUZGUzIpICs9IGNtZF95YWZmczIubwotQ09CSlMtJChDT05GSUdfVkZEKSArPSBjbWRfdmZkLm8KIAogIyBvdGhlcnMKIENPQkpTLSQoQ09ORklHX0REUl9TUEQpICs9IGRkcl9zcGQubwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF92ZmQuYyBiL2NvbW1vbi9jbWRfdmZkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YzE0ZDEuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2NtZF92ZmQuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBDb21tYW5kIHRvIGxvYWQgYSBzcGxhc2ggc2NyZWVuIHRvIHRoZSBWRkRzLgotICogTk9URSB0aGF0IHRoaXMgd2lsbCBiZSBjb250cm9sbGVkIGJ5IGEga2V5IGNvbWJpbmF0aW9uIHdoZW4KLSAqIHRoZSBrZXlib2FyZCBzdHVmZiB3b3Jrcy4gRm9yIG5vdyB0aGUgdXNlciBoYXMgdG8gZW50ZXIgYQotICogYml0bWFwIG51bWJlciAob25seSBWRkRfVEVTVF9MT0dPIGlzIHN1cHBvcnRlZCBub3cgLSAxNi4xMC4yMDAyKS4KLSAqIEFkZGVkIFZGRF9SRU1PVEVfTE9HTyAoc2FtZSBhcyBWRkRfVEVTVF9MT0dPIGJ1dCBhIGRpZmZlcmVudCBjb2xvcikKLSAqIG9uIDIwLjEwLjIwMDIuCi0gKgotICogVGhpcyByYXRoZXIgY3J1ZGVseSByZXF1aXJlcyB0aGF0IGVhY2ggYml0bWFwIGJlIGluY2x1ZGVkIGFzIGEKLSAqIGhlYWRlciBmaWxlLgotICovCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX1ZGRCkKLQotI2luY2x1ZGUgPHZmZF9sb2dvLmg+Ci0jZGVmaW5lIFZGRF9URVNUX0xPR09fQk1QTlIgMAotI2RlZmluZSBWRkRfUkVNT1RFX0xPR09fQk1QTlIgMQotCi1leHRlcm4gaW50IHRyYW5zZmVyX3BpYyh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyICosIGludCwgaW50KTsKLQotaW50IHRyYWJfdmZkICh1bG9uZyBiaXRtYXApOwotCi1pbnQgZG9fdmZkIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pCi17Ci0JdWxvbmcgYml0bWFwOwotCi0JaWYgKGFyZ2MgIT0gMikKLQkJcmV0dXJuIGNtZF91c2FnZShjbWR0cCk7Ci0KLQlpZiAoYXJndlsxXVswXSA9PSAnLycpIHsJLyogc2VsZWN0IGJpdG1hcCBieSBudW1iZXIgKi8KLQkJYml0bWFwID0gc2ltcGxlX3N0cnRvdWwoYXJndlsxXSsxLCBOVUxMLCAxMCk7Ci0JCXJldHVybiAodHJhYl92ZmQoYml0bWFwKSk7Ci0JfQotCi0JLyogZGlzcGxheSBiaXRtYXAgYXQgZ2l2ZW4gYWRkcmVzcyAqLwotCWJpdG1hcCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKLQl0cmFuc2Zlcl9waWMoMywgKHVjaGFyICopYml0bWFwLCBWRkRfTE9HT19IRUlHSFQsIFZGRF9MT0dPX1dJRFRIKTsKLQlyZXR1cm4gMDsKLX0KLQotVV9CT09UX0NNRCgKLQl2ZmQsCTIsCTAsCWRvX3ZmZCwKLQkibG9hZCBhIGJpdG1hcCB0byB0aGUgVkZEcyBvbiBUUkFCIiwKLQkiL05cbiIKLQkiICAgIC0gbG9hZCBiaXRtYXAgTiB0byB0aGUgVkZEcyAoTiBpcyBfZGVjaW1hbF8gISEhKVxuIgotCSJ2ZmQgQUREUlxuIgotCSIgICAgLSBsb2FkIGJpdG1hcCBhdCBhZGRyZXNzIEFERFIiCi0pOwotI2VuZGlmCi0KLWludCB0cmFiX3ZmZCAodWxvbmcgYml0bWFwKQotewotCXVjaGFyICphZGRyOwotCWNoYXIgKnM7Ci0KLQlzd2l0Y2ggKGJpdG1hcCkgewotCWNhc2UgVkZEX1RFU1RfTE9HT19CTVBOUjoKLQkJaWYgKChzID0gZ2V0ZW52ICgiYml0bWFwMCIpKSAhPSBOVUxMKSB7Ci0JCQlhZGRyID0gKHVjaGFyICopc2ltcGxlX3N0cnRvdWwgKHMsIE5VTEwsIDE2KTsKLQkJfSBlbHNlIHsKLQkJCWFkZHIgPSAmdmZkX3Rlc3RfbG9nb19iaXRtYXBbMF07Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBWRkRfUkVNT1RFX0xPR09fQk1QTlI6Ci0JCWlmICgocyA9IGdldGVudiAoImJpdG1hcDEiKSkgIT0gTlVMTCkgewotCQkJYWRkciA9ICh1Y2hhciAqKXNpbXBsZV9zdHJ0b3VsIChzLCBOVUxMLCAxNik7Ci0JCX0gZWxzZSB7Ci0JCQlhZGRyID0gJnZmZF9yZW1vdGVfbG9nb19iaXRtYXBbMF07Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRmKCJVbmtub3duIGJpdG1hcCAlbGRcbiIsIGJpdG1hcCk7Ci0JCXJldHVybiAxOwotCX0KLQl0cmFuc2Zlcl9waWMoMywgYWRkciwgVkZEX0xPR09fSEVJR0hULCBWRkRfTE9HT19XSURUSCk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9jb21tb24vbWFpbi5jIGIvY29tbW9uL21haW4uYwppbmRleCBkY2JhY2M5Li4yNzMwYzZmIDEwMDY0NAotLS0gYS9jb21tb24vbWFpbi5jCisrKyBiL2NvbW1vbi9tYWluLmMKQEAgLTI4OCwxNyArMjg4LDYgQEAKIAljaGFyIGJjc19zZXRbMTZdOwogI2VuZGlmIC8qIENPTkZJR19CT09UQ09VTlRfTElNSVQgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1ZGRCkgJiYgZGVmaW5lZChWRkRfVEVTVF9MT0dPKQotCXVsb25nIGJtcCA9IDA7CQkvKiBkZWZhdWx0IGJpdG1hcCAqLwotCWV4dGVybiBpbnQgdHJhYl92ZmQgKHVsb25nIGJpdG1hcCk7Ci0KLSNpZmRlZiBDT05GSUdfTU9ERU1fU1VQUE9SVAotCWlmIChkb19tZG1faW5pdCkKLQkJYm1wID0gMTsJLyogYWx0ZXJuYXRlIGJpdG1hcCAqLwotI2VuZGlmCi0JdHJhYl92ZmQgKGJtcCk7Ci0jZW5kaWYJLyogQ09ORklHX1ZGRCAmJiBWRkRfVEVTVF9MT0dPICovCi0KICNpZmRlZiBDT05GSUdfQk9PVENPVU5UX0xJTUlUCiAJYm9vdGNvdW50ID0gYm9vdGNvdW50X2xvYWQoKTsKIAlib290Y291bnQrKzsKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuc2NyYXB5YXJkIGIvZG9jL1JFQURNRS5zY3JhcHlhcmQKaW5kZXggZDdiZjlhNy4uNGNiNzI3ZiAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5zY3JhcHlhcmQKKysrIGIvZG9jL1JFQURNRS5zY3JhcHlhcmQKQEAgLTExLDExICsxMSwxMiBAQAogCiBCb2FyZAlBcmNoCUNQVQlyZW1vdmVkCSAgICBDb21taXQJbGFzdCBrbm93biBtYWludGFpbmVyL2NvbnRhY3QKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0cmFiCWFybQlTM0MyNDAwCS0JICAyMDExLTA1LTAxCUdhcnkgSmVubmVqb2huIDxnYXJ5akBkZW54LmRlPgogeHNlbmdpbmUgQVJNCVBYQTJ4eAk0MjYyYTdjICAgMjAxMC0xMC0yMAogd2VwZXAyNTAgQVJNCVBYQTJ4eAk3MzY5NDc4ICAgMjAxMC0xMC0yMAlQZXRlciBGaWd1bGkgPHBlcG9zaEBldGMuc2s+CiBkZWx0YQlBUk0JUFhBMnh4CTc1ZTIwMzUgICAyMDEwLTEwLTIwCiBtcDJ1c2IJQVJNCUFUOTFSTTI5MDAgCWVlOTg2ZTIJMjAxMS0wMS0yNQlFcmljIELDqW5hcmQgPGVyaWNAZXVrcmVhLmNvbT4KLWJhcmNvCXBvd2VycGMJTVBDODI0NQktCSAgMjAxMC0xMS0yMwlNYXJjIExlZW1hbiA8bWFyYy5sZWVtYW5AYmFyY28uY29tPgorYmFyY28JcG93ZXJwYwlNUEM4MjQ1CWFmYWEyN2IJICAyMDEwLTExLTIzCU1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBiYXJjby5jb20+CiBFUklDCXBvd2VycGMJNDA1R1AJZDliYTQ1MQkgIDIwMTAtMTEtMjEJU3dlbiBBbmRlcnNvbiA8c2FuZEBwZXBwZXJjb24uZGU+CiBWb1ZQTi1HV18xMDBNSHoJcG93ZXJwYwlNUEM4MjYwIDI2ZmUzZDIgMjAxMC0xMC0yNAlKdWVyZ2VuIFNlbGVudCA8ai5zZWxlbnRAZWxtZWcuZGU+CiBOQzY1MAlwb3dlcnBjCU1QQzg1MgkzMzNkODZkICAgMjAxMC0xMC0xOQlXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3MzYzI0eDAuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9zM2MyNHgwLmMKaW5kZXggZjQyYjE1ZS4uYWJkYmZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3MzYzI0eDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfczNjMjR4MC5jCkBAIC0yNywxNSArMjcsOSBAQAogI2RlZmluZSBVQVJUX05SCVMzQzI0WDBfVUFSVDAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMMikKLSMgaWYgZGVmaW5lZChDT05GSUdfVFJBQikKLSMgIGVycm9yICJUUkFCIHN1cHBvcnRzIG9ubHkgQ09ORklHX1NFUklBTDEiCi0jIGVuZGlmCiAjZGVmaW5lIFVBUlRfTlIJUzNDMjRYMF9VQVJUMQogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TRVJJQUwzKQotIyBpZiBkZWZpbmVkKENPTkZJR19UUkFCKQotIyAgZXJyb3IgIlRSQUIgc3VwcG9ydHMgb25seSBDT05GSUdfU0VSSUFMMSIKLSMgZW5kaWYKICNkZWZpbmUgVUFSVF9OUglTM0MyNFgwX1VBUlQyCiAKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1vbi5oIGIvaW5jbHVkZS9jb21tb24uaAppbmRleCAxZTRhNmE1Li4xZTIxYjdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29tbW9uLmgKQEAgLTYwNiw5ICs2MDYsNiBAQAogLyogJChDUFUpLy4uLi9sY2QuYyAqLwogdWxvbmcJbGNkX3NldG1lbSAodWxvbmcpOwogCi0vKiAkKENQVSkvLi4uL3ZmZC5jICovCi11bG9uZwl2ZmRfc2V0bWVtICh1bG9uZyk7Ci0KIC8qICQoQ1BVKS8uLi4vdmlkZW8uYyAqLwogdWxvbmcJdmlkZW9fc2V0bWVtICh1bG9uZyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlnX2NtZF9hbGwuaCBiL2luY2x1ZGUvY29uZmlnX2NtZF9hbGwuaAppbmRleCBjZGM1ZmYxLi45NzE2ZjljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ19jbWRfYWxsLmgKKysrIGIvaW5jbHVkZS9jb25maWdfY21kX2FsbC5oCkBAIC04Nyw3ICs4Nyw2IEBACiAjZGVmaW5lIENPTkZJR19DTURfVU5JVkVSU0UJLyogVHVuZHJhIFVuaXZlcnNlIFN1cHBvcnQJKi8KICNkZWZpbmUgQ09ORklHX0NNRF9VTlpJUAkvKiB1bnppcCBmcm9tIG1lbW9yeSB0byBtZW1vcnkJKi8KICNkZWZpbmUgQ09ORklHX0NNRF9VU0IJCS8qIFVTQiBTdXBwb3J0CQkJKi8KLSNkZWZpbmUgQ09ORklHX0NNRF9WRkQJCS8qIFZGRCBzdXBwb3J0IChUUkFCKQkJKi8KICNkZWZpbmUgQ09ORklHX0NNRF9YSU1HCQkvKiBMb2FkIHBhcnQgb2YgTXVsdGkgSW1hZ2UJKi8KIAogI2VuZGlmCS8qIF9DT05GSUdfQ01EX0FMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbXgxZnMyLmggYi9pbmNsdWRlL2NvbmZpZ3MvbXgxZnMyLmgKaW5kZXggMTYzMmNlOC4uZGRiYzY1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL214MWZzMi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9teDFmczIuaApAQCAtODgsNyArODgsNiBAQAogI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJICAgICAxCSAvKiBzZW5kIGNvbW1hbmRsaW5lIHRvIEtlcm5lbAkgICAgICovCiAjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUyAgICAgMQkgLyogc2VuZCBtZW1vcnkgZGVmaW5pdGlvbiB0byBrZXJuZWwgKi8KICNkZWZpbmUJIENPTkZJR19JTklUUkRfVEFHCSAgICAgMQkgICAvKiBzZW5kIGluaXRyZCBwYXJhbXMJKi8KLSN1bmRlZglDT05GSUdfVkZECQkJIC8qIGRvIG5vdCBzZW5kIGZyYW1lYnVmZmVyIHNldHVwICAgICovCiAKIC8qCiAgKiBNYWxsb2MgcG9vbCBuZWVkIHRvIGhvc3QgZW52ICsgMTI4IEtiIHJlc2VydmUgZm9yIG90aGVyIGFsbG9jYXRpb25zLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NjYjkzMjguaCBiL2luY2x1ZGUvY29uZmlncy9zY2I5MzI4LmgKaW5kZXggM2RhMjE0ZS4uNmE5MmVjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NjYjkzMjguaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc2NiOTMyOC5oCkBAIC05NSw3ICs5NSw2IEBACiAjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkgICAgIDEJIC8qIHNlbmQgY29tbWFuZGxpbmUgdG8gS2VybmVsCSAgICAgKi8KICNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTICAgICAxCSAvKiBzZW5kIG1lbW9yeSBkZWZpbml0aW9uIHRvIGtlcm5lbCAqLwogI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkgICAgIDEJIC8qIHNlbmQgaW5pdHJkIHBhcmFtcwkJICAgICAqLwotI3VuZGVmCUNPTkZJR19WRkQJCQkgLyogZG8gbm90IHNlbmQgZnJhbWVidWZmZXIgc2V0dXAgICAgKi8KIAogLyoKICAqIE1hbGxvYyBwb29sIG5lZWQgdG8gaG9zdCBlbnYgKyAxMjggS2IgcmVzZXJ2ZSBmb3Igb3RoZXIgYWxsb2NhdGlvbnMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdHJhYi5oIGIvaW5jbHVkZS9jb25maWdzL3RyYWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU3MzZhMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvdHJhYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE5ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDItMjAwNQotICogR2FyeSBKZW5uZWpvaG4gPGdhcnlqQGRlbnguZGU+Ci0gKgotICogQ29uZmlndWF0aW9uIHNldHRpbmdzIGZvciB0aGUgVFJBQiBib2FyZC4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaWZuZGVmIF9fQ09ORklHX0gKLSNkZWZpbmUgX19DT05GSUdfSAotCi0vKgotICogRGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIHdpdGggOCBNQiBGbGFzaCwgMzIgTUIgUkFNCi0gKi8KLSNpZiAoIWRlZmluZWQoQ09ORklHX0ZMQVNIXzhNQikpICYmICghZGVmaW5lZChDT05GSUdfRkxBU0hfMTZNQikpCi0jIGRlZmluZSBDT05GSUdfRkxBU0hfOE1CCS8qICA4IE1CIEZsYXNoCSovCi0jZW5kaWYKLSNpZiAoIWRlZmluZWQoQ09ORklHX1JBTV8xNk1CKSkgJiYgKCFkZWZpbmVkKENPTkZJR19SQU1fMzJNQikpCi0jIGRlZmluZSBDT05GSUdfUkFNXzMyTUIJLyogMzIgTUIgU0RSQU0JKi8KLSNlbmRpZgotCi0vKgotICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKLSAqIChlYXN5IHRvIGNoYW5nZSkKLSAqLwotI2RlZmluZSBDT05GSUdfQVJNOTIwVAkxCS8qIFRoaXMgaXMgYW4gYXJtOTIwdCBDUFUJKi8KLSNkZWZpbmUgQ09ORklHX1MzQzI0WDAJMQkvKiBpbiBhIFNBTVNVTkcgUzNDMjR4MC10eXBlIFNvQwkqLwotI2RlZmluZSBDT05GSUdfUzNDMjQwMAkxCS8qIHNwZWNpZmljYWxseSBhIFNBTVNVTkcgUzNDMjQwMCBTb0MJKi8KLSNkZWZpbmUgQ09ORklHX1RSQUIJMQkvKiBvbiBhIFRSQUIgQm9hcmQJCSovCi0jdW5kZWYgQ09ORklHX1RSQUJfNTBNSFoJLyogcnVuIHRoZSBDUFUgYXQgNTAgTUh6CSovCi0KLS8qIGF1dG9tYXRpYyBzb2Z0d2FyZSB1cGRhdGVzIChzZWUgYm9hcmQvdHJhYi9hdXRvX3VwZGF0ZS5jKSAqLwotI2RlZmluZSBDT05GSUdfQVVUT19VUERBVEUJMQotCi0vKiBpbnB1dCBjbG9jayBvZiBQTEwgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkxMjAwMDAwMCAvKiBUUkFCIGhhcyAxMiBNSHogaW5wdXQgY2xvY2sgKi8KLQotI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCi0KLSNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCSAxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzCSovCi0jZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUyAxCi0jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCSAxCi0KLSNkZWZpbmUgQ09ORklHX1NZU19ERVZJQ0VfTlVMTERFVgkgMQkvKiBlbmJsZSBudWxsIGRldmljZQkJKi8KLSNkZWZpbmUgQ09ORklHX1NJTEVOVF9DT05TT0xFCSAxCS8qIGVuYWJsZSBzaWxlbnQgc3RhcnR1cAkqLwotCi0jZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFCTEgICAgICAgLyogaW5jbHVkZSB2ZXJzaW9uIGVudiB2YXJpYWJsZSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEkyQyBzdHVmZjoKLSAqIHRoZSBUUkFCIGlzIGVxdWlwcGVkIHdpdGggYW4gQVRNRUwgMjRDMDQgRUVQUk9NIGF0Ci0gKiBhZGRyZXNzIDB4NTQgd2l0aCA4Yml0IGFkZHJlc3NpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCQkJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJMTAwMDAwCS8qIEkyQyBzcGVlZCAqLwotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TTEFWRQkJMHg3RgkvKiBJMkMgc2xhdmUgYWRkciAqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSCTB4NTQJLyogRUVQUk9NIGFkZHJlc3MgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFJfTEVOCTEJLyogMSBhZGRyZXNzIGJ5dGUgKi8KLQotI2RlZmluZSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyAweDAxCi0jZGVmaW5lIENPTkZJR19TWVNfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAzCS8qIDggYnl0ZXMgcGFnZSB3cml0ZSBtb2RlIG9uIDI0QzA0ICovCi0jZGVmaW5lIENPTkZJR19TWVNfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKLQotLyogVVNCIHN0dWZmICovCi0jZGVmaW5lIENPTkZJR19VU0JfT0hDSV9ORVcJMQotI2RlZmluZSBDT05GSUdfVVNCX1NUT1JBR0UJMQotI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgkxCi0KLSN1bmRlZiBDT05GSUdfU1lTX1VTQl9PSENJX0JPQVJEX0lOSVQKLSNkZWZpbmUgQ09ORklHX1NZU19VU0JfT0hDSV9DUFVfSU5JVAkxCi0KLSNkZWZpbmUgQ09ORklHX1NZU19VU0JfT0hDSV9SRUdTX0JBU0UJMHgxNDIwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1VTQl9PSENJX1NMT1RfTkFNRQkiczNjMjQwMCIKLSNkZWZpbmUgQ09ORklHX1NZU19VU0JfT0hDSV9NQVhfUk9PVF9QT1JUUwkxNQotCi0vKgotICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoQ09ORklHX0VOVl9TSVpFICsgMTI4KjEwMjQpCi0KLS8qCi0gKiBIYXJkd2FyZSBkcml2ZXJzCi0gKi8KLSNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQotI2RlZmluZSBDT05GSUdfQ1M4OTAwCQkvKiB3ZSBoYXZlIGEgQ1M4OTAwIG9uLWJvYXJkICovCi0jZGVmaW5lIENPTkZJR19DUzg5MDBfQkFTRQkweDA3MDAwMzAwIC8qIGFncmVlcyB3aXRoIFdJTiBDRSBQQSAqLwotI2RlZmluZSBDT05GSUdfQ1M4OTAwX0JVUzE2CS8qIHRoZSBMaW51eCBkcml2ZXIgZG9lcyBhY2Nlc3NlcyBhcyBzaG9ydHMgKi8KLQotI2RlZmluZSBDT05GSUdfRFJJVkVSX1MzQzI0WDBfSTJDIDEJLyogd2UgdXNlIHRoZSBidWlsZGluIEkyQyBjb250cm9sbGVyICovCi0KLSNkZWZpbmUgQ09ORklHX1ZGRAkJMQkvKiBWRkQgbGluZWFyIGZyYW1lIGJ1ZmZlciBkcml2ZXIgKi8KLSNkZWZpbmUgVkZEX1RFU1RfTE9HTwkJMQkvKiBvdXRwdXQgYSB0ZXN0IGxvZ28gdG8gdGhlIFZGRHMgKi8KLQotLyoKLSAqIHNlbGVjdCBzZXJpYWwgY29uc29sZSBjb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1MzQzI0WDBfU0VSSUFMCi0jZGVmaW5lIENPTkZJR19TRVJJQUwxCQkxCS8qIHdlIHVzZSBTRVJJQUwgMSBvbiBUUkFCICovCi0KLSNkZWZpbmUgQ09ORklHX0hXRkxPVwkJCS8qIGluY2x1ZGUgUlRTL0NUUyBmbG93IGNvbnRyb2wgc3VwcG9ydAkqLwotCi0jZGVmaW5lIENPTkZJR19NT0RFTV9TVVBQT1JUCTEJLyogZW5hYmxlIG1vZGVtIGluaXRpYWxpemF0aW9uIHN0dWZmICovCi0KLSNkZWZpbmUJQ09ORklHX01PREVNX0tFWV9NQUdJQwkiMjMiCS8qIGhvbGQgZG93biB0aGVzZSBrZXlzIHRvIGVuYWJsZSBtb2RlbSAqLwotCi0vKgotICogVGhlIGZvbGxvd2luZyBlbmFibGVzIG1vZGVtIGRlYnVnZ2luZyBzdHVmZi4gVGhlIGRiZygpIGFuZAotICogJ2NoYXIgc2NyZWVuWzEwMjRdJyBhcmUgdXNlZCBmb3IgZGVidWcgcHJpbnRmcy4gVW5mb3J0dW5hdGVseSwKLSAqIGl0IGlzIHVzYWJsZSBvbmx5IGZyb20gQkRJCi0gKi8KLSN1bmRlZiBDT05GSUdfTU9ERU1fU1VQUE9SVF9ERUJVRwotCi0vKiBhbGxvdyB0byBvdmVyd3JpdGUgc2VyaWFsIGFuZCBldGhhZGRyICovCi0jZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCi0KLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKLQotI2RlZmluZQlDT05GSUdfVElNRVNUQU1QCTEJLyogUHJpbnQgdGltZXN0YW1wIGluZm8gZm9yIGltYWdlcyAqLwotCi0vKiBVc2UgczNjMjQwMCdzIFJUQyAqLwotI2RlZmluZSBDT05GSUdfUlRDX1MzQzI0WDAJMQotCi0KLS8qCi0gKiBCT09UUCBvcHRpb25zCi0gKi8KLSNkZWZpbmUgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRQotI2RlZmluZSBDT05GSUdfQk9PVFBfQk9PVFBBVEgKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0dBVEVXQVkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX0hPU1ROQU1FCi0KLQotLyoKLSAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgotICovCi0jaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+Ci0KLSNkZWZpbmUgQ09ORklHX0NNRF9CU1AKLSNkZWZpbmUgQ09ORklHX0NNRF9EQVRFCi0jZGVmaW5lIENPTkZJR19DTURfREhDUAotI2RlZmluZSBDT05GSUdfQ01EX0ZBVAotI2RlZmluZSBDT05GSUdfQ01EX05GUwotI2RlZmluZSBDT05GSUdfQ01EX1NOVFAKLSNkZWZpbmUgQ09ORklHX0NNRF9VU0IKLQotI2lmZGVmIENPTkZJR19IV0ZMT1cKLSAgICAjZGVmaW5lIENPTkZJR19DTURfSFdGTE9XCi0jZW5kaWYKLQotI2lmZGVmCUNPTkZJR19WRkQKLSAgICAjZGVmaW5lIENPTkZJR19DTURfVkZECi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19EUklWRVJfUzNDMjRYMF9JMkMKLSAgICAjZGVmaW5lIENPTkZJR19DTURfRUVQUk9NCi0gICAgI2RlZmluZSBDT05GSUdfQ01EX0kyQwotI2VuZGlmCi0KLSNpZm5kZWYgVVNFXzkyMFRfTU1VCi0gICAgI3VuZGVmIENPTkZJR19DTURfQ0FDSEUKLSNlbmRpZgotCi0KLS8qIG1vdmVkIHVwICovCi0jZGVmaW5lIENPTkZJR19TWVNfSFVTSF9QQVJTRVIJCTEJLyogdXNlICJodXNoIiBjb21tYW5kIHBhcnNlcgkqLwotCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQotI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sJLyogYWxsb3cgdG8gYnJlYWsgaW4gYWx3YXlzICovCi0jZGVmaW5lIENPTkZJR19QUkVCT09UCQkiZWNobztlY2hvICoqKiBib290aW5nICoqKjtlY2hvIgotI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJCSJjb25zb2xlPXR0eVMwIgotI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4wLjAKLSNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4zLjY4Ci0jZGVmaW5lIENPTkZJR19IT1NUTkFNRQkJdHJhYgotI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMy4xCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiYnVybl9pbiIKLQotI2lmbmRlZiBDT05GSUdfRkxBU0hfOE1CCS8qIGN1cnJlbnQgY29uZmlnOiAxNiBNQiBmbGFzaCAqLwotI2lmZGVmIENPTkZJR19TWVNfSFVTSF9QQVJTRVIKLSNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCi0JIm5mc19hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIgXAotCQkibmZzcm9vdD0kc2VydmVyaXA6JHJvb3RwYXRoXDAiIFwKLQkicm9vdHBhdGg9L29wdC9lbGRrL2FybV85MjBURElcMCIgXAotCSJyYW1fYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIiBcCi0JImFkZF9uZXQ9c2V0ZW52IGJvb3RhcmdzICRib290YXJncyBldGhhZGRyPSRldGhhZGRyICIgXAotCQkiaXA9JGlwYWRkcjokc2VydmVyaXA6JGdhdGV3YXlpcDokbmV0bWFzazokaG9zdG5hbWU6Om9mZlwwIiBcCi0JImFkZF9taXNjPXNldGVudiBib290YXJncyAkYm9vdGFyZ3MgY29uc29sZT10dHlTMCBwYW5pYz0xXDAiIFwKLQkidS1ib290PS90ZnRwYm9vdC9UUkFCL3UtYm9vdC5iaW5cMCIgXAotCSJsb2FkPXRmdHAgQzEwMDAwMCAke3UtYm9vdH1cMCIgXAotCSJ1cGRhdGU9cHJvdGVjdCBvZmYgMCA1RkZGRjtlcmEgMCA1RkZGRjsiIFwKLQkJImNwLmIgQzEwMDAwMCAwICRmaWxlc2l6ZVwwIiBcCi0JImxvYWRmaWxlPS90ZnRwYm9vdC9UUkFCL3VJbWFnZVwwIiBcCi0JImxvYWRhZGRyPWM0MDAwMDBcMCIgXAotCSJuZXRfbG9hZD10ZnRwYm9vdCAkbG9hZGFkZHIgJGxvYWRmaWxlXDAiIFwKLQkibmV0X25mcz1ydW4gbmV0X2xvYWQgbmZzX2FyZ3MgYWRkX25ldCBhZGRfbWlzYztib290bVwwIiBcCi0JImtlcm5lbF9hZGRyPTAwMDYwMDAwXDAiIFwKLQkiZmxhc2hfbmZzPXJ1biBuZnNfYXJncyBhZGRfbmV0IGFkZF9taXNjO2Jvb3RtICRrZXJuZWxfYWRkclwwIiBcCi0JIm1kbV9pbml0MT1BVFpcMCIgXAotCSJtZG1faW5pdDI9QVRTMD0xXDAiIFwKLQkibWRtX2Zsb3dfY29udHJvbD1ydHMvY3RzXDAiCi0jZWxzZSAvKiAhQ09ORklHX1NZU19IVVNIX1BBUlNFUiAqLwotI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCVwKLQkibmZzX2FyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIiBcCi0JCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiIFwKLQkicm9vdHBhdGg9L29wdC9lbGRrL2FybV85MjBURElcMCIgXAotCSJyYW1fYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIiBcCi0JImFkZF9uZXQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGV0aGFkZHI9JHtldGhhZGRyfSAiIFwKLQkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfToke2hvc3RuYW1lfTo6b2ZmXDAiIFwKLQkiYWRkX21pc2M9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAgcGFuaWM9MVwwIiBcCi0JInUtYm9vdD0vdGZ0cGJvb3QvVFJBQi91LWJvb3QuYmluXDAiIFwKLQkibG9hZD10ZnRwIEMxMDAwMDAgJHt1LWJvb3R9XDAiIFwKLQkidXBkYXRlPXByb3RlY3Qgb2ZmIDAgNUZGRkY7ZXJhIDAgNUZGRkY7IiBcCi0JCSJjcC5iIEMxMDAwMDAgMCAke2ZpbGVzaXplfVwwIiBcCi0JImxvYWRmaWxlPS90ZnRwYm9vdC9UUkFCL3VJbWFnZVwwIiBcCi0JImxvYWRhZGRyPWM0MDAwMDBcMCIgXAotCSJuZXRfbG9hZD10ZnRwYm9vdCAke2xvYWRhZGRyfSAke2xvYWRmaWxlfVwwIiBcCi0JIm5ldF9uZnM9cnVuIG5ldF9sb2FkIG5mc19hcmdzIGFkZF9uZXQgYWRkX21pc2M7Ym9vdG1cMCIgXAotCSJrZXJuZWxfYWRkcj0wMDBDMDAwMFwwIiBcCi0JImZsYXNoX25mcz1ydW4gbmZzX2FyZ3MgYWRkX25ldCBhZGRfbWlzYztib290bSAke2tlcm5lbF9hZGRyfVwwIiBcCi0JIm1kbV9pbml0MT1BVFpcMCIgXAotCSJtZG1faW5pdDI9QVRTMD0xXDAiIFwKLQkibWRtX2Zsb3dfY29udHJvbD1ydHMvY3RzXDAiCi0jZW5kaWYJLyogQ09ORklHX1NZU19IVVNIX1BBUlNFUiAqLwotI2Vsc2UJLyogQ09ORklHX0ZMQVNIXzhNQgkgPT4gOCBNQiBmbGFzaCAqLwotI2lmZGVmIENPTkZJR19TWVNfSFVTSF9QQVJTRVIKLSNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCi0JIm5mc19hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIgXAotCQkibmZzcm9vdD0kc2VydmVyaXA6JHJvb3RwYXRoXDAiIFwKLQkicm9vdHBhdGg9L29wdC9lbGRrL2FybV85MjBURElcMCIgXAotCSJyYW1fYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIiBcCi0JImFkZF9uZXQ9c2V0ZW52IGJvb3RhcmdzICRib290YXJncyBldGhhZGRyPSRldGhhZGRyICIgXAotCQkiaXA9JGlwYWRkcjokc2VydmVyaXA6JGdhdGV3YXlpcDokbmV0bWFzazokaG9zdG5hbWU6Om9mZlwwIiBcCi0JImFkZF9taXNjPXNldGVudiBib290YXJncyAkYm9vdGFyZ3MgY29uc29sZT10dHlTMCBwYW5pYz0xXDAiIFwKLQkidS1ib290PS90ZnRwYm9vdC9UUkFCL3UtYm9vdC5iaW5cMCIgXAotCSJsb2FkPXRmdHAgQzEwMDAwMCAke3UtYm9vdH1cMCIgXAotCSJ1cGRhdGU9cHJvdGVjdCBvZmYgMCAzRkZGRjtlcmEgMCAzRkZGRjsiIFwKLQkJImNwLmIgQzEwMDAwMCAwICRmaWxlc2l6ZTsiIFwKLQkJInNldGVudiBmaWxlc2l6ZTtzYXZlZW52XDAiIFwKLQkibG9hZGZpbGU9L3RmdHBib290L1RSQUIvdUltYWdlXDAiIFwKLQkibG9hZGFkZHI9QzQwMDAwMFwwIiBcCi0JIm5ldF9sb2FkPXRmdHBib290ICRsb2FkYWRkciAkbG9hZGZpbGVcMCIgXAotCSJuZXRfbmZzPXJ1biBuZXRfbG9hZCBuZnNfYXJncyBhZGRfbmV0IGFkZF9taXNjO2Jvb3RtXDAiIFwKLQkia2VybmVsX2FkZHI9MDAwQzAwMDBcMCIgXAotCSJmbGFzaF9uZnM9cnVuIG5mc19hcmdzIGFkZF9uZXQgYWRkX21pc2M7Ym9vdG0gJGtlcm5lbF9hZGRyXDAiIFwKLQkibWRtX2luaXQxPUFUWlwwIiBcCi0JIm1kbV9pbml0Mj1BVFMwPTFcMCIgXAotCSJtZG1fZmxvd19jb250cm9sPXJ0cy9jdHNcMCIKLSNlbHNlIC8qICFDT05GSUdfU1lTX0hVU0hfUEFSU0VSICovCi0jZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJXAotCSJuZnNfYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiIFwKLQkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIgXAotCSJyb290cGF0aD0vb3B0L2VsZGsvYXJtXzkyMFRESVwwIiBcCi0JInJhbV9hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3XDAiIFwKLQkiYWRkX25ldD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gZXRoYWRkcj0ke2V0aGFkZHJ9ICIgXAotCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9OiR7aG9zdG5hbWV9OjpvZmZcMCIgXAotCSJhZGRfbWlzYz1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCBwYW5pYz0xXDAiIFwKLQkidS1ib290PS90ZnRwYm9vdC9UUkFCL3UtYm9vdC5iaW5cMCIgXAotCSJsb2FkPXRmdHAgQzEwMDAwMCAke3UtYm9vdH1cMCIgXAotCSJ1cGRhdGU9cHJvdGVjdCBvZmYgMCAzRkZGRjtlcmEgMCAzRkZGRjsiIFwKLQkJImNwLmIgQzEwMDAwMCAwICR7ZmlsZXNpemV9OyIgXAotCQkic2V0ZW52IGZpbGVzaXplO3NhdmVlbnZcMCIgXAotCSJsb2FkZmlsZT0vdGZ0cGJvb3QvVFJBQi91SW1hZ2VcMCIgXAotCSJsb2FkYWRkcj1DNDAwMDAwXDAiIFwKLQkibmV0X2xvYWQ9dGZ0cGJvb3QgJHtsb2FkYWRkcn0gJHtsb2FkZmlsZX1cMCIgXAotCSJuZXRfbmZzPXJ1biBuZXRfbG9hZCBuZnNfYXJncyBhZGRfbmV0IGFkZF9taXNjO2Jvb3RtXDAiIFwKLQkia2VybmVsX2FkZHI9MDAwQzAwMDBcMCIgXAotCSJmbGFzaF9uZnM9cnVuIG5mc19hcmdzIGFkZF9uZXQgYWRkX21pc2M7Ym9vdG0gJHtrZXJuZWxfYWRkcn1cMCIgXAotCSJtZG1faW5pdDE9QVRaXDAiIFwKLQkibWRtX2luaXQyPUFUUzA9MVwwIiBcCi0JIm1kbV9mbG93X2NvbnRyb2w9cnRzL2N0c1wwIgotI2VuZGlmIC8qIENPTkZJR19TWVNfSFVTSF9QQVJTRVIgKi8KLSNlbmRpZgkvKiBDT05GSUdfRkxBU0hfOE1CICovCi0KLSNpZiAxCS8qIGZlZWwgZnJlZSB0byBkaXNhYmxlIGZvciBkZXZlbG9wbWVudCAqLwotI2RlZmluZQlDT05GSUdfQVVUT0JPT1RfS0VZRUQJCS8qIEVuYWJsZSBwYXNzd29yZCBwcm90ZWN0aW9uCSovCi0jZGVmaW5lIENPTkZJR19BVVRPQk9PVF9QUk9NUFQJCVwKLQkiXG5FbnRlciBwYXNzd29yZCAtIGF1dG9ib290IGluICVkIHNlYy4uLlxuIiwgYm9vdGRlbGF5Ci0jZGVmaW5lIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIJIlIiCS8qIDFzdCAicGFzc3dvcmQiCSovCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQotI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkxMTUyMDAJCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCi0vKiB3aGF0J3MgdGhpcyA/IGl0J3Mgbm90IHVzZWQgYW55d2hlcmUgKi8KLSNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTEJCS8qIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLwotI2VuZGlmCi0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCi0gKi8KLSNkZWZpbmUJQ09ORklHX1NZU19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KLSNkZWZpbmUJQ09ORklHX1NZU19QUk9NUFQJCSJUUkFCICMgIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCi0jaWZkZWYJQ09ORklHX1NZU19IVVNIX1BBUlNFUgotI2RlZmluZSBDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCi0jZW5kaWYKLQotI2RlZmluZQlDT05GSUdfU1lTX0NCU0laRQkJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwotI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUJQ09ORklHX1NZU19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJQ09ORklHX1NZU19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLwotCi0jZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDBDMDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwRDAwMDAwMAkvKiAxNiBNQiBpbiBEUkFNCSovCi0KLSNkZWZpbmUJQ09ORklHX1NZU19MT0FEX0FERFIJCTB4MENGMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KLQotI2RlZmluZQlDT05GSUdfU1lTX0haCQkJMTAwMAotCi0vKiB2YWxpZCBiYXVkcmF0ZXMgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9Ci0KLSNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCQkvKiBoYXZlIG1pc2NfaW5pdF9yKCkgZnVuY3Rpb24JKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogYnVybi1pbiB0ZXN0IHN0dWZmLgotICoKLSAqIEJVUk5fSU5fQ1lDTEVfREVMQVkgZGVmaW5lcyB0aGUgc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gZWFjaCBidXJuLWluIGN5Y2xlCi0gKiBCZWNhdXNlIHRoZSBidXJuLWluIHRlc3QgaXRzZWxmIGNhdXNlcyBhbHNvIGFuIGRlbGF5IG9mIGFib3V0IDQgc2Vjb25kcywKLSAqIHRoaXMgdGltZSBtdXN0IGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZGVzaXJlZCBvdmVyYWxsIGJ1cm4taW4gY3ljbGUgdGltZS4KLSAqLwotI2RlZmluZSBCVVJOX0lOX0NZQ0xFX0RFTEFZCTI5NgkvKiBzZWNvbmRzIGJldHdlZW4gYnVybi1pbiBjeWNsZXMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU3RhY2sgc2l6ZXMKLSAqCi0gKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdwotICovCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDEyOCoxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCi0jaWZkZWYgQ09ORklHX1VTRV9JUlEKLSNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEJKDQqMTAyNCkJLyogSVJRIHN0YWNrICovCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRCSg0KjEwMjQpCS8qIEZJUSBzdGFjayAqLwotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKLSAqLwotI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCQkvKiB3ZSBoYXZlIDEgYmFuayBvZiBEUkFNICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMQkJMHgwQzAwMDAwMAkvKiBTRFJBTSBCYW5rICMxICovCi0jaWZuZGVmIENPTkZJR19SQU1fMTZNQgotI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQkweDAyMDAwMDAwCS8qIDMyIE1CICovCi0jZWxzZQotI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRQkweDAxMDAwMDAwCS8qIDE2IE1CICovCi0jZW5kaWYKLQotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UJCTB4MDAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAqLwotCi0vKiBUaGUgZm9sbG93aW5nICNkZWZpbmVzIGFyZSBuZWVkZWQgdG8gZ2V0IGZsYXNoIGVudmlyb25tZW50IHJpZ2h0ICovCi0jZGVmaW5lCUNPTkZJR19TWVNfTU9OSVRPUl9CQVNFCUNPTkZJR19TWVNfRkxBU0hfQkFTRQotI2RlZmluZQlDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQotCi0vKiBEeW5hbWljIE1URCBwYXJ0aXRpb24gc3VwcG9ydCAqLwotI2RlZmluZSBDT05GSUdfQ01EX01URFBBUlRTCi0jZGVmaW5lIENPTkZJR19NVERfREVWSUNFCQkvKiBuZWVkZWQgZm9yIG10ZHBhcnRzIGNvbW1hbmRzICovCi0jZGVmaW5lIENPTkZJR19GTEFTSF9DRklfTVRECi0jZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD0wIgotCi0vKiBwcm9kdWN0aW9uIGZsYXNoIGxheW91dCAqLwotI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz0wOjE2ayhGaXJtd2FyZTEpcm8sIgkJXAotCQkJCQkJIjE2ayhFbnYxKSwiCQlcCi0JCQkJCQkiMTZrKEVudjIpLCIJCVwKLQkJCQkJCSIzMzZrKEZpcm13YXJlMilybywiCVwKLQkJCQkJCSI4OTZrKEtlcm5lbCksIgkJXAotCQkJCQkJIjUzNzZrKFJvb3QtRlMpLCIJXAotCQkJCQkJIjE0MDhrKEpGRlMyKSwiCQlcCi0JCQkJCQkiLShWRkQpIgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCi0gKi8KLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLwotI2lmbmRlZiBDT05GSUdfRkxBU0hfOE1CCi0jZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJMTI4CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLwotI2Vsc2UKLSNkZWZpbmUgQ09ORklHX1NZU19NQVhfRkxBU0hfU0VDVAk3MQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KLSNlbmRpZgotCi0vKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9FUkFTRV9UT1VUCSgxNSpDT05GSUdfU1lTX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLwotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQJKDIqQ09ORklHX1NZU19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KLQotI2RlZmluZQlDT05GSUdfRU5WX0lTX0lOX0ZMQVNICTEKLQotLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBQcmltYXJ5IEVudmlyb25tZW50IFNlY3RvcgkqLwotI2lmbmRlZiBDT05GSUdfRkxBU0hfOE1CCi0jZGVmaW5lIENPTkZJR19FTlZfQUREUgkJKENPTkZJR19TWVNfRkxBU0hfQkFTRSArIDB4NjAwMDApCi0jZGVmaW5lIENPTkZJR19FTlZfU0laRQkJMHg0MDAwCi0jZGVmaW5lIENPTkZJR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAKLSNlbHNlCi0jZGVmaW5lIENPTkZJR19FTlZfQUREUgkJKENPTkZJR19TWVNfRkxBU0hfQkFTRSArIDB4NDAwMCkKLSNkZWZpbmUgQ09ORklHX0VOVl9TSVpFCQkweDQwMDAKLSNkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUJMHg0MDAwCi0jZW5kaWYKLQotLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBSZWR1bmRhbnQgRW52aXJvbm1lbnQgU2VjdG9yCSovCi0jZGVmaW5lIENPTkZJR19FTlZfT0ZGU0VUX1JFRFVORAkoQ09ORklHX0VOVl9BRERSK0NPTkZJR19FTlZfU0VDVF9TSVpFKQotI2RlZmluZSBDT05GSUdfRU5WX1NJWkVfUkVEVU5ECShDT05GSUdfRU5WX1NJWkUpCi0KLSNkZWZpbmUJQ09ORklHX1NZU19VU0VfUFBDRU5WCQkJLyogRW52aXJvbm1lbnQgZW1iZWRkZWQgaW4gc2VjdCAucHBjZW52ICovCi0KLS8qIEluaXRpYWwgdmFsdWUgb2YgdGhlIG9uLWJvYXJkIHRvdWNoIHNjcmVlbiBicmlnaHRuZXNzICovCi0jZGVmaW5lIENPTkZJR19TWVNfQlJJR0hUTkVTUyAweDIwCi0KLSNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MveG0yNTAuaCBiL2luY2x1ZGUvY29uZmlncy94bTI1MC5oCmluZGV4IDIzMmJhZjMuLmQ2MWMyYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy94bTI1MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy94bTI1MC5oCkBAIC0xMzksNyArMTM5LDYgQEAKICNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCSAxCSAvKiBzZW5kIGNvbW1hbmRsaW5lIHRvIEtlcm5lbAkJKi8KICNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTIDEJIC8qIHNlbmQgbWVtb3J5IGRlZmluaXRpb24gdG8ga2VybmVsCSovCiAjZGVmaW5lCUNPTkZJR19JTklUUkRfVEFHCSAxCSAvKiBkbyBub3Qgc2VuZCBpbml0cmQgcGFyYW1zCQkqLwotI3VuZGVmCUNPTkZJR19WRkQJCQkgLyogZG8gbm90IHNlbmQgZnJhbWVidWZmZXIgc2V0dXAJKi8KIAogLyoKICAqIFN0YWNrIHNpemVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3N0ZGlvX2Rldi5oIGIvaW5jbHVkZS9zdGRpb19kZXYuaAppbmRleCA4MmFkNDYzLi4yM2UwZWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3N0ZGlvX2Rldi5oCisrKyBiL2luY2x1ZGUvc3RkaW9fZGV2LmgKQEAgLTEwNSw5ICsxMDUsNiBAQAogI2lmZGVmIENPTkZJR19MQ0QKIGludAlkcnZfbGNkX2luaXQgKHZvaWQpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZGRAotaW50CWRydl92ZmRfaW5pdCAodm9pZCk7Ci0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19WSURFTykgfHwgZGVmaW5lZChDT05GSUdfQ0ZCX0NPTlNPTEUpCiBpbnQJZHJ2X3ZpZGVvX2luaXQgKHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZmZF9sb2dvLmggYi9pbmNsdWRlL3ZmZF9sb2dvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MTg2N2EuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS92ZmRfbG9nby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAzMiArMCwwIEBACi0vKgotICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgInRvb2xzL2JtcF9sb2dvIgotICoKLSAqIERPIE5PVCBFRElUCi0gKgotICovCi0KLQotI2lmbmRlZiBfX1ZGRF9MT0dPX0hfXwotI2RlZmluZSBfX1ZGRF9MT0dPX0hfXwotCi0jZGVmaW5lIFZGRF9MT0dPX1dJRFRICQkxMTIKLSNkZWZpbmUgVkZEX0xPR09fSEVJR0hUCQk3MgotI2RlZmluZSBWRkRfTE9HT19DT0xPUlMJCTAKLSNkZWZpbmUgVkZEX0xPR09fT0ZGU0VUCQkwCi0KLQotdW5zaWduZWQgY2hhciB2ZmRfdGVzdF9sb2dvX2JpdG1hcFtdID0gewotCTB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZELCAweERELCAweERELCAweERELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsCi0JMHhERiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwKLQkweERELCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweERELCAweERELCAweERELCAweERGLCAweEZGLCAweEZELAotCTB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwKLQkweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELAotCTB4REQsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELAotCTB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERGLCAweEZGLCAweERELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZELAotCTB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsCi0JMHhGRCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERiwKLQkweEZELCAweERELCAweERGLCAweEZGLCAweEZELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhERCwgMHhERCwgMHhERiwgMHhGRCwKLQkweERELCAweERELCAweERELCAweERELCAweEZGLCAweERELCAweERELCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhGRCwKLQkweERELCAweERELCAweEZGLCAweERELCAweERELCAweERELCAweERELCAweERGLAotCTB4RkQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweERELCAweERELCAweERGLCAweERELCAweERELCAweERGLCAweEZELAotCTB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELCAweEZELAotCTB4REQsIDB4REQsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERiwgMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZELCAweERGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4REYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELAotCTB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhERCwgMHhERCwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhGRCwKLQkweERELCAweERELCAweERELCAweERELCAweERGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwKLQkweERELCAweERELCAweERGLCAweERELCAweERELCAweERELCAweERELCAweERELAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweEZGLCAweEZELCAweERELCAweERELCAweEZELAotCTB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwKLQkweERELCAweERELCAweEZGLCAweEZGLCAweERELCAweERELCAweERGLCAweEZGLAotCTB4REQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZELCAweERELCAweERELCAweERELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsCi0JMHhERiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwKLQkweERELCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweERELCAweERELCAweERELCAweERGLCAweEZGLCAweEZELAotCTB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwKLQkweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELAotCTB4REQsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELAotCTB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERGLCAweEZGLCAweERELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZELAotCTB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsCi0JMHhGRCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERiwKLQkweEZELCAweERELCAweERGLCAweEZGLCAweEZELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhERCwgMHhERCwgMHhERiwgMHhGRCwKLQkweERELCAweERELCAweERELCAweERELCAweEZGLCAweERELCAweERELCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhGRCwKLQkweERELCAweERELCAweEZGLCAweERELCAweERELCAweERELCAweERELCAweERGLAotCTB4RkQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweERELCAweERELCAweERGLCAweERELCAweERELCAweERGLCAweEZELAotCTB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELCAweEZELAotCTB4REQsIDB4REQsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERiwgMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZELCAweERGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4REYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELAotCTB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhERCwgMHhERCwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhGRCwKLQkweERELCAweERELCAweERELCAweERELCAweERGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwKLQkweERELCAweERELCAweERGLCAweERELCAweERELCAweERELCAweERELCAweERELAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweEZGLCAweEZELCAweERELCAweERELCAweEZELAotCTB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwKLQkweERELCAweERELCAweEZGLCAweEZGLCAweERELCAweERELCAweERGLCAweEZGLAotCTB4REQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZELCAweERELCAweERELCAweERELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsCi0JMHhERiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwKLQkweERELCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweERELCAweERELCAweERELCAweERGLCAweEZGLCAweEZELAotCTB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwKLQkweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELAotCTB4REQsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELAotCTB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERGLCAweEZGLCAweERELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZELAotCTB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsCi0JMHhGRCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERiwKLQkweEZELCAweERELCAweERGLCAweEZGLCAweEZELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhERCwgMHhERCwgMHhERiwgMHhGRCwKLQkweERELCAweERELCAweERELCAweERELCAweEZGLCAweERELCAweERELCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhGRCwKLQkweERELCAweERELCAweEZGLCAweERELCAweERELCAweERELCAweERELCAweERGLAotCTB4RkQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweERELCAweERELCAweERGLCAweERELCAweERELCAweERGLCAweEZELAotCTB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELCAweEZELAotCTB4REQsIDB4REQsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERiwgMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZELCAweERGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4REYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELAotCTB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhERCwgMHhERCwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhGRCwKLQkweERELCAweERELCAweERELCAweERELCAweERGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwKLQkweERELCAweERELCAweERGLCAweERELCAweERELCAweERELCAweERELCAweERELAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweEZGLCAweEZELCAweERELCAweERELCAweEZELAotCTB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwKLQkweERELCAweERELCAweEZGLCAweEZGLCAweERELCAweERELCAweERGLCAweEZGLAotCTB4REQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZELCAweERELCAweERELCAweERELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsCi0JMHhERiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwKLQkweERELCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweERELCAweERELCAweERELCAweERGLCAweEZGLCAweEZELAotCTB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwKLQkweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELAotCTB4REQsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELAotCTB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERGLCAweEZGLCAweERELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRCwKLQkweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERGLCAweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLAotCTB4RkQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZELAotCTB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REYsIDB4RkYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsCi0JMHhGRCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweERELCAweERELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERiwKLQkweEZELCAweERELCAweERGLCAweEZGLCAweEZELCAweERELCAweERGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhERCwgMHhERCwgMHhERiwgMHhGRCwKLQkweERELCAweERELCAweERELCAweERELCAweEZGLCAweERELCAweERELCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhGRCwKLQkweERELCAweERELCAweEZGLCAweERELCAweERELCAweERELCAweERELCAweERGLAotCTB4RkQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweERELCAweERELCAweERGLCAweERELCAweERELCAweERGLCAweEZELAotCTB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELCAweEZELAotCTB4REQsIDB4REQsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERiwgMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZELCAweERGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4REQsIDB4REQsIDB4REYsIDB4RkQsIDB4REQsIDB4REYsIDB4RkQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELAotCTB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4RkYsCi0JMHhERCwgMHhERCwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhGRCwKLQkweERELCAweERELCAweERELCAweERELCAweERGLCAweERELCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwKLQkweERELCAweERELCAweERGLCAweERELCAweERELCAweERELCAweERELCAweERELAotCTB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwgMHhERCwgMHhERiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweEZGLCAweEZELCAweERELCAweERELCAweEZELAotCTB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRCwgMHhERCwKLQkweERELCAweERELCAweEZGLCAweEZGLCAweERELCAweERELCAweERGLCAweEZGLAotCTB4REQsIDB4REQsIDB4REYsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsCi0JMHhGRCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweERELCAweERELCAweERELCAweERELCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweERELCAweERELAotCTB4REQsIDB4REQsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkQsIDB4REQsIDB4REQsIDB4REQsIDB4REQsIDB4REYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIDB4REQsIDB4REQsCi0JMHhERCwgMHhERCwgMHhERCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhERCwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERCwgMHhERCwgMHhERCwKLQkweERELCAweERELCAweERELCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERELCAweERGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELCAweERELCAweERELCAweERELAotfTsKLQotdW5zaWduZWQgY2hhciB2ZmRfcmVtb3RlX2xvZ29fYml0bWFwW10gPSB7Ci0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwKLQkweDlGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEY5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LAotCTB4OTksIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RjksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LAotCTB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksCi0JMHg5OSwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksCi0JMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OUYsIDB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEY5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RjksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwKLQkweEY5LCAweDk5LCAweDlGLCAweEZGLCAweEY5LCAweDk5LCAweDlGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlGLAotCTB4RjksIDB4OTksIDB4OUYsIDB4RkYsIDB4RjksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDlGLCAweDk5LCAweDk5LCAweDlGLCAweEY5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweEY5LAotCTB4OTksIDB4OTksIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsCi0JMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OUYsIDB4RjksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4RjksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDlGLCAweEZGLCAweDk5LCAweDk5LCAweDlGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGOSwKLQkweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksCi0JMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweDk5LCAweDk5LCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweEY5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDlGLCAweEZGLAotCTB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4RjksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LAotCTB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHg5OSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwKLQkweDlGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEY5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LAotCTB4OTksIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RjksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LAotCTB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksCi0JMHg5OSwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksCi0JMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OUYsIDB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEY5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RjksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwKLQkweEY5LCAweDk5LCAweDlGLCAweEZGLCAweEY5LCAweDk5LCAweDlGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlGLAotCTB4RjksIDB4OTksIDB4OUYsIDB4RkYsIDB4RjksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDlGLCAweDk5LCAweDk5LCAweDlGLCAweEY5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweEY5LAotCTB4OTksIDB4OTksIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsCi0JMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OUYsIDB4RjksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4RjksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDlGLCAweEZGLCAweDk5LCAweDk5LCAweDlGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGOSwKLQkweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksCi0JMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweDk5LCAweDk5LCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweEY5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDlGLCAweEZGLAotCTB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4RjksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LAotCTB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHg5OSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwKLQkweDlGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEY5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LAotCTB4OTksIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RjksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LAotCTB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksCi0JMHg5OSwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksCi0JMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OUYsIDB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEY5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RjksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwKLQkweEY5LCAweDk5LCAweDlGLCAweEZGLCAweEY5LCAweDk5LCAweDlGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlGLAotCTB4RjksIDB4OTksIDB4OUYsIDB4RkYsIDB4RjksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDlGLCAweDk5LCAweDk5LCAweDlGLCAweEY5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweEY5LAotCTB4OTksIDB4OTksIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsCi0JMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OUYsIDB4RjksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4RjksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDlGLCAweEZGLCAweDk5LCAweDk5LCAweDlGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGOSwKLQkweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksCi0JMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweDk5LCAweDk5LCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweEY5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDlGLCAweEZGLAotCTB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4RjksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LAotCTB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHg5OSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwKLQkweDlGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEY5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LAotCTB4OTksIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RjksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LAotCTB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksCi0JMHg5OSwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksCi0JMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OUYsIDB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEY5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OUYsIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RjksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwKLQkweEY5LCAweDk5LCAweDlGLCAweEZGLCAweEY5LCAweDk5LCAweDlGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGOSwKLQkweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGOSwKLQkweDk5LCAweDlGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlGLAotCTB4RjksIDB4OTksIDB4OUYsIDB4RkYsIDB4RjksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDlGLCAweDk5LCAweDk5LCAweDlGLCAweEY5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4OTksIDB4OTksIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweEY5LAotCTB4OTksIDB4OTksIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsCi0JMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OUYsIDB4RjksCi0JMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4RjksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDlGLCAweEZGLCAweDk5LCAweDk5LCAweDlGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGOSwgMHg5OSwgMHg5RiwgMHhGOSwKLQkweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDlGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksCi0JMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHhGRiwKLQkweDk5LCAweDk5LCAweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEY5LCAweDk5LCAweDk5LCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweEY5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDlGLCAweEZGLAotCTB4OTksIDB4OTksIDB4OUYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksCi0JMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEY5LCAweDk5LCAweDk5LCAweDlGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4RjksCi0JMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDlGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY5LCAweDk5LAotCTB4OTksIDB4OTksIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsCi0JMHg5OSwgMHg5OSwgMHg5RiwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwKLQkweEY5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OTksIDB4OTksCi0JMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5RiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOSwgMHg5OSwgMHg5OSwKLQkweDk5LCAweDk5LCAweDk5LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweDk5LCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDk5LCAweDk5LCAweDk5LAotCTB4OTksIDB4OTksIDB4OTksIDB4OUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RjksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OTksIDB4OUYsCi0JMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLQkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjksIDB4OTksIDB4OTksIDB4OTksCi19OwotCi0jZW5kaWYgLyogX19WRkRfTE9HT19IX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2Vudi9SRUFETUUgYi90b29scy9lbnYvUkVBRE1FCmluZGV4IGQ1ZjIyOGYuLjNmMGQ3N2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Vudi9SRUFETUUKKysrIGIvdG9vbHMvZW52L1JFQURNRQpAQCAtMzQsOSArMzQsNiBAQAogI2RlZmluZSBERVZJQ0UyX0VTSVpFICAgICAweDQwMDAKICNkZWZpbmUgREVWSUNFMl9FTlZTRUNUT1JTICAgICAyCiAKLUN1cnJlbnQgY29uZmlndXJhdGlvbiBtYXRjaGVzIHRoZSBlbnZpcm9ubWVudCBsYXlvdXQgb2YgdGhlIFRSQUIKLWJvYXJkLgotCiBVbi1kZWZpbmUgSEFWRV9SRURVTkQsIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgdXRsaXRpZXMgb24gYSBzeXN0ZW0KIHRoYXQgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciByZWR1bmRhbnQgZW52aXJvbm1lbnQgZW5hYmxlZC4KIElmIEhBVkVfUkVEVU5EIGlzIHVuZGVmaW5lZCwgREVWSUNFMl9OQU1FIGlzIGlnbm9yZWQsCmRpZmYgLS1naXQgYS90b29scy9lbnYvZndfZW52LmggYi90b29scy9lbnYvZndfZW52LmgKaW5kZXggYzgzZDYwOC4uOTI1OGM3OSAxMDA2NDQKLS0tIGEvdG9vbHMvZW52L2Z3X2Vudi5oCisrKyBiL3Rvb2xzL2Vudi9md19lbnYuaApAQCAtMjQsNyArMjQsNyBAQAogLyoKICAqIFRvIGJ1aWxkIHRoZSB1dGlsaXR5IHdpdGggdGhlIHJ1bi10aW1lIGNvbmZpZ3VyYXRpb24KICAqIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lLgotICogU2VlIGluY2x1ZGVkICJmd19lbnYuY29uZmlnIiBzYW1wbGUgZmlsZSAoVFJBQiBib2FyZCkKKyAqIFNlZSBpbmNsdWRlZCAiZndfZW52LmNvbmZpZyIgc2FtcGxlIGZpbGUKICAqIGZvciBub3RlcyBvbiBjb25maWd1cmF0aW9uLgogICovCiAjZGVmaW5lIENPTkZJR19GSUxFICAgICAiL2V0Yy9md19lbnYuY29uZmlnIgo=